Respuesta corta: use android:gravityo setGravity()para controlar la gravedad de todas las vistas secundarias de un contenedor; use android:layout_gravityo setLayoutParams()para controlar la gravedad de una vista individual en un contenedor.
Larga historia: para controlar la gravedad en un contenedor de diseño lineal como LinearLayouto RadioGroup, hay dos enfoques:
1) Para controlar la gravedad de TODAS las vistas secundarias de un LinearLayoutcontenedor (como lo hizo en su libro), use android:gravity(no android:layout_gravity) en el archivo XML de diseño o setGravity()método en código.
2) Para controlar la gravedad de una vista secundaria en su contenedor, use el android:layout_gravityatributo XML. En el código, uno necesita obtener LinearLayout.LayoutParamsla vista y establecer su gravedad. Aquí hay un ejemplo de código que establece un botón en la parte inferior de un contenedor orientado horizontalmente:
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 el LinearLayoutcontenedor horizontal , la gravedad horizontal de su vista secundaria está alineada a la izquierda una tras otra y no se puede cambiar. Establecer android:layout_gravityen center_horizontalno tiene ningún efecto. La gravedad vertical predeterminada es center (o center_vertical) y se puede cambiar a top o bottom. En realidad, el layout_gravityvalor predeterminado es -1pero Android lo coloca en el centro verticalmente.
Para cambiar las posiciones horizontales de las vistas secundarias en un contenedor lineal horizontal, se puede usar el layout_weightmargen y el relleno de la vista secundaria.
Del mismo modo, para el contenedor de grupo de vista vertical, la gravedad vertical de su vista secundaria está alineada uno debajo del otro y no se puede cambiar. La gravedad horizontal predeterminada es el centro (o center_horizontal) y se puede cambiar a izquierda o derecha.
En realidad, una vista secundaria, como un botón, también tiene un android:gravityatributo XML y el setGravity()método para controlar sus vistas secundarias: el texto que contiene . El Button.setGravity(int)está vinculado a esta entrada de developer.android.com .