Краткий ответ: используйте android:gravity
или setGravity()
для управления гравитацией всех дочерних видов контейнера;используйте android:layout_gravity
или setLayoutParams()
для управления гравитацией отдельного вида в контейнере.
Длинная история: для управления гравитацией в контейнере с линейной компоновкой, например LinearLayout
или RadioGroup
, существует два подхода:
1) Чтобы контролировать гравитацию ВСЕХ дочерних представлений контейнера LinearLayout
(как вы это делали в своей книге), используйте android:gravity
(не android:layout_gravity
) в XML-файле макета или setGravity()
метод в коде.
2) Чтобы управлять гравитацией дочернего представления в его контейнере, используйте атрибут android:layout_gravity
XML.В коде нужно получить LinearLayout.LayoutParams
вида и установить его гравитацию.Вот пример кода, который устанавливает кнопку на дно в горизонтально ориентированном контейнере:
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);
Для горизонтального LinearLayout
контейнера горизонтальная гравитация его дочернего вида выравнивается по левому краю один за другим и не может бытьизменилось.Настройка android:layout_gravity
на center_horizontal
не имеет никакого эффекта.Вертикальная гравитация по умолчанию - центр (или center_vertical) и может быть изменен на верх или низ.На самом деле значение по умолчанию layout_gravity
равно -1
, но Android помещает его по центру.
Чтобы изменить горизонтальные позиции дочерних видов в горизонтальном линейном контейнере, можно использовать layout_weight
, поле и отступ дочернего вида.
Аналогично, для контейнера вертикальной группы представлений вертикальная гравитация его дочернего вида выравнивается сверху друг над другом и не может быть изменена.Горизонтальная гравитация по умолчанию - центр (или center_horizontal
) и может быть изменена на левую или правую.
На самом деле, дочернее представление, такое как кнопка, также имеет атрибут android:gravity
XML и метод setGravity()
дляконтролировать свои дочерние представления - текст в нем.Button.setGravity(int)
связан с этой записью developer.android.com .