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

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

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 .
