RelativeLayout — это группа элементов, которая отображает дочерние элементы в относительном положении. Положение каждого элемента может быть задано относительно соседних элементов (например, слева или ниже другого элемента) или относительно области родительского RelativeLayout (например, выравнивание по нижнему краю, левому краю или центру).
Примечание: Для повышения производительности и улучшения поддержки инструментов следует использовать ConstraintLayout для создания макета .

RelativeLayout — это очень мощный инструмент для проектирования пользовательского интерфейса, поскольку он позволяет исключить вложенные группы представлений и сохранить иерархию макета плоской, что повышает производительность. Если вы используете несколько вложенных групп LinearLayout , вы можете заменить их одним RelativeLayout .
Расположение видов
RelativeLayout позволяет дочерним элементам задавать свое положение относительно родительского элемента или друг относительно друга (по идентификатору). Таким образом, вы можете выровнять два элемента по правому краю, расположить один под другим, центрировать на экране, центрировать слева и так далее. По умолчанию все дочерние элементы отображаются в верхнем левом углу макета, поэтому вам необходимо определить положение каждого элемента, используя различные свойства макета, доступные в RelativeLayout.LayoutParams .
К числу многочисленных свойств компоновки, доступных для элементов RelativeLayout относятся:
android:layout_alignParentTop- Если значение
"true", то верхний край этого элемента будет совпадать с верхним краем родительского элемента. android:layout_centerVertical- Если
"true", то этот дочерний элемент центрируется по вертикали внутри родительского элемента. -
android:layout_below - Располагает верхний край этого представления ниже представления, указанного с помощью идентификатора ресурса.
-
android:layout_toRightOf - Располагает левый край этого представления справа от представления, указанного с помощью идентификатора ресурса.
Это лишь несколько примеров. Все атрибуты макета описаны в RelativeLayout.LayoutParams .
Значение каждого свойства макета представляет собой либо логическое значение, позволяющее задать положение макета относительно родительского RelativeLayout , либо идентификатор, ссылающийся на другое представление в макете, относительно которого должно быть позиционировано данное представление.
В XML-макете зависимости от других представлений могут быть объявлены в любом порядке. Например, вы можете объявить, что "view1" будет расположен ниже "view2", даже если "view2" является последним представлением, объявленным в иерархии. Пример ниже демонстрирует такой сценарий.
Пример
Особое внимание уделяется каждому из атрибутов, определяющих относительное положение каждого изображения.

<?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>
Подробную информацию обо всех атрибутах макета, доступных каждому дочернему представлению RelativeLayout , см. в RelativeLayout.LayoutParams .
