Свойства android:gravity и android:layout_gravity


При создании макетов экрана нередко используются два свойства: android:gravity и android:layout_gravity, которые позволяют менять расположение элементов на экране с тяготением к определенной точке. Gravity переводится с английского как «притяжение», «тяготение». Разница между этими двумя свойствами заключается в том, что android:gravity определяет тяготение внутри какого-либо элемента, а android:layout_gravity — тяготение элемента по отношению к родительскому контейнеру. Рассмотрим это все на примерах.

Для начала создадим простой LinearLayout без какой-либо центровки.

1
2
3
4
5
6
7
8
9
10
11
12
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
 
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />
 
</LinearLayout>

Внутрь LinearLayout мы поместили кнопку. Размеры LinearLayout определяются размерами кнопки. Выглядит это так:

LinearLayout

Как видим, кнопка расположилась слева, как и оборачивающий ее layout. Давайте теперь зададим для этого LinearLayout выравнивание справа относительно родителя — экрана. Добавим для него свойство android:layout_gravity.

1
2
3
4
5
6
7
8
9
10
11
12
13
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right" >
 
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/app_name" />
 
</LinearLayout>

Теперь сам layout и кнопка расположились справа.

layout_gravity

Если мы сейчас изменим ширину и высоту LinearLayout так, чтобы он заполнял весь экран, то центровки справа мы уже не увидим, т.к. кнопка находится внутри layout-a и layout_gravity родителя на нее не влияет:

1
2
3
4
5
6
7
8
9
10
11
12
13
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="right" >
 
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/app_name" />
 
</LinearLayout>

LinearLayout

Чтобы вновь выровнять кнопку справа, мы должны добавить свойство android:gravity для LinearLayout, которое будет центрировать все вложенные в данный layout элементы справа:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="right"
    android:gravity="right" >
 
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/app_name" />
 
</LinearLayout>

Вновь получаем нужный результат:

gravity

Думаю, на этих примерах разница между android:gravity и android:layout_gravity стала понятной. Помимо значения right можно задавать различные вариации: center, top, bottom и т.д. Можно задавать сразу несколько значений через вертикальную черту:

1
android:gravity="top|center"

один комментарий на “Свойства android:gravity и android:layout_gravity

  1. Akella

    Хорошо бы переделать пример на 2 кнопки. Чтобы в итоге одну сдвинуть влево, а другую вправо.

    Reply

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*