ConstraintLayout
16.01.2025
ConstraintLayout представляет контейнер, который позволяет создавать гибкие и масштабируемые визуальные интерфейсы.
Ограничения (constraints)
Для позиционирования элемента внутри ConstraintLayout
необходимо указать ограничения (constraints). Есть несколько типов ограничений. В частности, для установки позиции относительно определенного элемента используются следующие ограничения:
layout_constraintLeft_toLeftOf: левая граница позиционируется относительно левой границы другого элемента.
layout_constraintLeft_toRightOf: левая граница позиционируется относительно правой границы другого элемента.
layout_constraintRight_toLeftOf: правая граница позиционируется относительно левой границы другого элемента.
layout_constraintRight_toRightOf: правая граница позиционируется относительно правой границы другого элемента.
layout_constraintTop_toTopOf: верхняя граница позиционируется относительно верхней границы другого элемента.
layout_constraintTop_toBottomOf: верхняя граница позиционируется относительно нижней границы другого элемента.
layout_constraintBottom_toBottomOf: нижняя граница позиционируется относительно нижней границы другого элемента.
layout_constraintBottom_toTopOf: нижняя граница позиционируется относительно верхней границы другого элемента.
layout_constraintBaseline_toBaselineOf: базовая линия позиционируется относительно базовой линии другого элемента.
layout_constraintStart_toEndOf: элемент начинается там, где завершается другой элемент.
layout_constraintStart_toStartOf: элемент начинается там, где начинается другой элемент.
layout_constraintEnd_toStartOf: элемент завершается там, где начинается другой элемент.
layout_constraintEnd_toEndOf: элемент завершается там, где завершается другой элемент.
Примечание о правосторонней ориентации
Некоторые языки (например, арабский или фарси) имеют правостороннюю ориентацию, то есть символы идут справа налево, а не слева направо, как в европейских языках. В зависимости от текущей ориентации - левосторонней или правосторонней - будет изменяться то, где именно начало, а где завершение элемента. Например:
При левосторонней ориентации
layout_constraintStart_toEndOf
аналогиченlayout_constraintLeft_toRightOf
.При правосторонней ориентации
layout_constraintStart_toEndOf
аналогиченlayout_constraintRight_toLeftOf
.
Каждое ограничение устанавливает позиционирование элемента либо по горизонтали, либо по вертикали. И для определения позиции элемента в ConstraintLayout
необходимо указать как минимум одно ограничение по горизонтали и одно ограничение по вертикали.
Позиционирование может производиться
Относительно границ самого контейнера
ConstraintLayout
(в этом случае ограничение имеет значениеparent
).Относительно любого другого элемента внутри
ConstraintLayout
(в качестве значения ограничения указываетсяid
этого элемента).
Пример 1: Простое позиционирование
Объяснение
app:layout_constraintLeft_toLeftOf="parent"
устанавливает левую границуTextView
у левой границы контейнера.app:layout_constraintTop_toTopOf="parent"
устанавливает верхнюю границуTextView
у верхней границы контейнера.
В итоге TextView
будет располагаться в верхнем левом углу контейнера.
Пример 2: Ограничения относительно другого элемента
Объяснение
У
EditText
:Верхняя и левая границы выравниваются относительно контейнера.
У
Button
:Верхняя граница выравнивается относительно верхней границы контейнера.
Левая граница выравнивается относительно правой границы
EditText
.
Центрирование элемента
Для расположения элемента в центре контейнера по вертикали:
Для расположения элемента в центре по горизонтали:
Полное центрирование элемента
Сдвиг элементов
Для сдвига по горизонтали используется:
Для сдвига по вертикали:
Значение - число с плавающей точкой от 0
до 1
. По умолчанию 0.5
.
Объяснение
Первый
TextView
сдвигается на20%
от левой границы контейнера.Второй
TextView
сдвигается на90%
.
Last updated