Краткий ответ: используйте 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 .