Resposta curta: use android:gravityou setGravity()para controlar a gravidade de todas as visualizações filho de um contêiner; use android:layout_gravityou setLayoutParams()para controlar a gravidade de uma vista individual em um contêiner.
Longa história: para controlar a gravidade em um contêiner de layout linear, como LinearLayoutou RadioGroup, existem duas abordagens:
1) Para controlar a gravidade de TODAS as visualizações filho de um LinearLayoutcontêiner (como você fez no seu livro), use android:gravity(não android:layout_gravity) no arquivo XML de layout ou setGravity()método no código.
2) Para controlar a gravidade de uma visão filho em seu contêiner, use o android:layout_gravityatributo XML. No código, é preciso obter LinearLayout.LayoutParamsa visão e definir sua gravidade. Aqui está um exemplo de código que define um botão para baixo em um contêiner horizontalmente orientado:
import android.widget.LinearLayout.LayoutParams;
import android.view.Gravity;
...
Button button = (Button) findViewById(R.id.MyButtonId);
// need to cast to LinearLayout.LayoutParams to access the gravity field
LayoutParams params = (LayoutParams)button.getLayoutParams();
params.gravity = Gravity.BOTTOM;
button.setLayoutParams(params);
Para LinearLayoutcontêiner horizontal , a gravidade horizontal de sua exibição filho é alinhada à esquerda uma após a outra e não pode ser alterada. Definir android:layout_gravitypara center_horizontalnão tem efeito. A gravidade vertical padrão é o centro (ou central_vertical) e pode ser alterada para cima ou para baixo. Na verdade, o layout_gravityvalor padrão é, -1mas o Android coloca-o no centro verticalmente.
Para alterar as posições horizontais das vistas filho em um contêiner linear horizontal, pode-se usar a layout_weightmargem e o preenchimento da vista filho.
Da mesma forma, para o contêiner vertical do Grupo de vistas, a gravidade vertical da vista secundária é alinhada superiormente abaixo da outra e não pode ser alterada. A gravidade horizontal padrão é o centro (ou center_horizontal) e pode ser alterada para esquerda ou direita.
Na verdade, uma exibição filho como um botão também possui android:gravityatributo XML e o setGravity()método para controlar suas exibições filho - o texto nele. O Button.setGravity(int)está vinculado a esta entrada developer.android.com .