Relative Layout – особенности макетов экранов android приложений

Перевод документации официального сайта developer.android.com

RelativeLayout – это view group, которая располагает на экране дочерние view определенным образом относительно других элементов. Позиция каждого view может быть определена как относительно других view (например, слева, справа, сверху или снизу) так и относительно родительской области RelativeLayout (например, выравнивание по верхней, нижней, левой, правой сторонам  или по центру).

Relative Layout - особенности макетов экранов android приложений

RelativeLayout – очень мощная утилита для разработки пользовательского интерфейса, поскольку она позволяет сократить количество вложенных view group, тем самым повышая производительность. Если вы используете несколько вложенных групп LinearLayout, вы можете заменить их одним RelativeLayout.

Расположение View

RelativeLayout позволяет дочерним view определять свою позицию относительно родительского view или относительно друг друга (с помощью ID). Таким образом вы можете выровнять два элемента относительно правой границы, или сделать один ниже другого, центрировать, и т. д. По умолчанию все дочерние view устанавливаются в правом верхнем углу layout, так что вы должны указать позицию каждого view используя различные свойства, доступные в RelativeLayout.LayoutParams (смотрите таблицу в конце этой статьи).

Некоторые из свойств макета, доступные view в RelativeLayout:

android:layout_alignParentTop
Делает верхний край этого view совпадающим с верхним краем родителя.

android:layout_centerVertical
Центрирует этот дочерний элемент по вертикали в его родителе.

android:layout_below
Располагает верхний край этого view ниже view, определенного с помощью ID.

android:layout_toRightOf
Располагает левый край этого view правее view, определенного с помощью ID.

Это всего лишь несколько примеров. Все атрибуты макета задокументированы в RelativeLayout.LayoutParams (смотрите таблицу в конце этой статьи).

Значение для каждого свойства макета либо логическое, что позволяет установить позицию макета относительно родительского RelativeLayout, либо ID, который ссылается на другой view в макете, по отношению к которому view должен быть расположен.

В вашем XML layout, зависимости по отношению к другим view в макете могут быть объявлены в любом порядке. Например, вы можете указать, что “view1” будет расположен ниже “view2“, даже если “view2” – последний элемент, объявленный в иерархии. Пример ниже демонстрирует такой сценарий.

Пример

Каждый из атрибутов, которые контролируют относительное положение view, выделен.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp" >
    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/reminder" />
    <Spinner
        android:id="@+id/dates"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/times" />
    <Spinner
        android:id="@id/times"
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_alignParentRight="true" />
    <Button
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/times"
        android:layout_alignParentRight="true"
        android:text="@string/done" />
</RelativeLayout>

 

Таблица всех атрибутов макета, доступных дочерним view в RelativeLayout:

Перевод таблицы. Оригинал здесь.
XML Атрибуты элементов (views)
Имя атрибута Способ относительного расположения  
android:layout_above Расположение текущего элемента выше элемента, указанного по ID
android:layout_alignBaseline Расположение текущего элемента на одной линии с элементом, указанным по ID
android:layout_alignBottom Выравнивание текущего элемента по нижнему краю элемента, указанного по ID
android:layout_alignEnd Конечный край текущего элемента соответствует конечному краю элемента, указанного по ID
android:layout_alignLeft Выравнивание текущего элемента по левому краю элемента, указанного по ID
android:layout_alignParentBottom Выравнивание текущего элемента по нижнему краю родителя
android:layout_alignParentEnd Конечный край текущего элемента соответствует конечному краю родителя
android:layout_alignParentLeft Выравнивание текущего элемента по левому краю родителя
android:layout_alignParentRight Выравнивание текущего элемента по правому краю родителя
android:layout_alignParentStart Начальный край текущего элемента соответствует начальному краю родителя
android:layout_alignParentTop Выравнивание текущего элемента по верхнему краю родителя
android:layout_alignRight Выравнивание текущего элемента по правому краю элемента, указанного по ID
android:layout_alignStart Начальный край текущего элемента соответствует начальному краю элемента, указанного по ID
android:layout_alignTop Выравнивание текущего элемента по верхнему краю элемента, указанного по ID
android:layout_alignWithParentIfMissing Родитель будет использоваться в качестве привязки в случае её отсутствия для layout_toLeftOf, layout_toRightOf, и т.д.
android:layout_below Расположение текущего элемента ниже элемента, указанного по ID
android:layout_centerHorizontal Выравнивание текущего элемента по центру горизонтально
android:layout_centerInParent Выравнивание текущего элемента по центру вертикально и горизонтально относительно родителя
android:layout_centerVertical Выравнивание текущего элемента по центру вертикально
android:layout_toEndOf Начальный край текущего элемента соответствует конечному краю элемента, указанного по ID
android:layout_toLeftOf Расположение текущего элемента слева от элемента, указанного по ID
android:layout_toRightOf Расположение текущего элемента справа от элемента, указанного по ID
android:layout_toStartOf Конечный край текущего элемента соответствует начальному краю элемента, указанного по ID

 

Эта статья является переводом официальной документации сайта developer.android.com  Ссылка на источник.
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License

 

Коментарі: 3
  1. Дмитрий

    Понятно описано. Но непонятно, зачем там сложно реализована работа с layout android? Есть масса примеров построения GUI, например, в VisualStudio или Delphi. В них гораздо удобнее и нагляднее построение пользовательского интерфейса. Одно свойство – Align – решает кучу проблем. Однако в Android, почему-то, это не реализовано. Поэтому приходится через одно место строить все интерфейсы, мучаясь с layout-ами.

  2. Спасибо за подробное объяснение.

Додати коментар