Создайте линейный макет

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

LinearLayout — это группа элементов, которая выравнивает все дочерние элементы в одном направлении, вертикально или горизонтально. Направление компоновки можно указать с помощью атрибута android:orientation .

Изображение, демонстрирующее компоновку, разделенную на три вертикальных среза.
Рисунок 1. LinearLayout с тремя горизонтально ориентированными дочерними элементами.

Все дочерние элементы LinearLayout располагаются один за другим, поэтому в вертикальном списке на каждой строке находится только один дочерний элемент, независимо от их ширины. Горизонтальный список имеет высоту всего в одну строку, которая равна высоте самого высокого дочернего элемента плюс отступы. LinearLayout учитывает поля между дочерними элементами и выравнивание каждого дочернего элемента по горизонтали , вертикали, центру или левому краю.

Вес компоновки

LinearLayout также поддерживает присвоение веса отдельным дочерним элементам с помощью атрибута android:layout_weight . Этот атрибут присваивает элементу значение «важности» в зависимости от того, сколько места он занимает на экране. Большее значение веса позволяет элементу расшириться, чтобы заполнить оставшееся пространство в родительском элементе. Дочерние элементы могут указывать значение веса, и любое оставшееся пространство в группе элементов распределяется между дочерними элементами пропорционально их заявленному весу. Вес по умолчанию равен нулю.

Равномерное распределение

Чтобы создать линейную компоновку, в которой каждый дочерний элемент занимает одинаковое количество места на экране, установите для параметра android:layout_height каждого элемента значение "0dp" для вертикальной компоновки или для параметра android:layout_width каждого элемента значение "0dp" для горизонтальной компоновки. Затем установите для параметра android:layout_weight каждого элемента значение "1" .

Неравномерное распределение

Также можно создавать линейные макеты, где дочерние элементы занимают разное количество места на экране. Рассмотрим следующие примеры:

  • Предположим, у вас есть три текстовых поля: два с весом 1 и третье с весом по умолчанию 0. Третье текстовое поле, с весом 0, занимает только ту область, которая необходима для его содержимого. Два других текстовых поля, с весом 1, равномерно расширяются, заполняя пространство, оставшееся после измерения содержимого всех трех полей.
  • Если же у вас есть три текстовых поля, два из которых имеют весовое значение 1, а третье — 2, то оставшееся после измерения содержимого всех трех полей пространство распределяется следующим образом: половина — на поле с весовым значением 2, а половина — поровну между полями с весовым значением 1.

На следующем рисунке и в приведенном фрагменте кода показано, как могут работать веса элементов макета в действии «Отправить сообщение». Поле «Кому» , строка темы и кнопка «Отправить » занимают только необходимую им высоту. Область сообщения занимает остальную высоту действия.

Изображение, демонстрирующее три поля EditText и кнопку в вертикально ориентированном LinearLayout.
Рисунок 2. Три текстовых поля и кнопка в вертикально ориентированном LinearLayout .
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical" >
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/to" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/subject" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="top"
        android:hint="@string/message" />
    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:text="@string/send" />
</LinearLayout>

Подробную информацию об атрибутах, доступных каждому дочернему представлению LinearLayout , см. в LinearLayout.LayoutParams .