RelativeLayout – это контейнер ViewGroup, в котором дочерние представления отображаются в относительных позициях. Положение каждого представления можно задать относительно соседних элементов (например, слева или ниже другого представления) или относительно родительской области 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.