ConstraintLayout
— это гибкий и мощный макет в Android, который позволяет создавать сложные разметки с плоской иерархией (минимальное вложение View). Он был разработан для замены RelativeLayout
, LinearLayout
и других традиционных макетов, предлагая более производительный и удобный способ позиционирования элементов.
Каждый элемент в ConstraintLayout
привязывается (constraint) к другим элементам, родительскому контейнеру или направляющим (guidelines). Пример:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Здесь кнопка привязана к началу, концу и верху родителя (центрирование по горизонтали).
Позволяют управлять распределением группы View по горизонтали или вертикали. Типы цепочек:
Пример:
<Button
android:id="@+id/button1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/button2"
app:layout_constraintHorizontal_chainStyle="packed"/>
<Button
android:id="@+id/button2"
app:layout_constraintStart_toEndOf="@id/button1"
app:layout_constraintEnd_toEndOf="parent"/>
android:layout_margin
).app:layout_constraintHorizontal_bias="0.3"
Невидимые линии, к которым можно привязывать элементы. Могут быть вертикальными или горизонтальными.
Пример:
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
Динамическая "стена", которая перемещается в зависимости от размеров привязанных к ней элементов. Полезно для адаптивных интерфейсов.
Пример:
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier"
app:barrierDirection="end"
app:constraint_referenced_ids="text1,text2" />
Позволяет управлять видимостью нескольких элементов одновременно.
Пример:
<androidx.constraintlayout.widget.Group
android:id="@+id/group"
android:visibility="gone"
app:constraint_referenced_ids="button1,button2" />
✅ Производительность: Минимальная вложенность View → меньше нагрузка на измерение (measure) и размещение (layout).
✅ Гибкость: Позволяет создавать сложные макеты без глубокой иерархии.
✅ Адаптивность: Легко адаптируется под разные размеры экранов.
✅ Инструменты: Поддержка в Android Studio (визуальный редактор).
<androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/title"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<ImageView
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<Button
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/guideline"
app:layout_constraintEnd_toEndOf="@id/guideline"/>
</androidx.constraintlayout.widget.ConstraintLayout>
LinearLayout
внутри RelativeLayout
). ConstraintLayout
— это современный и мощный инструмент для создания гибких и производительных макетов в Android, который минимизирует вложенность View и предоставляет множество возможностей для позиционирования элементов.