Перевод документации официального сайта developer.android.com
RelativeLayout – это view group, которая располагает на экране дочерние view определенным образом относительно других элементов. Позиция каждого view может быть определена как относительно других view (например, слева, справа, сверху или снизу) так и относительно родительской области RelativeLayout (например, выравнивание по верхней, нижней, левой, правой сторонам или по центру).
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
Понятно описано. Но непонятно, зачем там сложно реализована работа с layout android? Есть масса примеров построения GUI, например, в VisualStudio или Delphi. В них гораздо удобнее и нагляднее построение пользовательского интерфейса. Одно свойство – Align – решает кучу проблем. Однако в Android, почему-то, это не реализовано. Поэтому приходится через одно место строить все интерфейсы, мучаясь с layout-ами.
Спасибо за подробное объяснение.