Относительный макет

Попробуйте способ создания композиций.
Jetpack Compose — это рекомендуемый набор инструментов для создания пользовательского интерфейса для Android. Узнайте, как работать с макетами в Compose.

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 .