В ConstraintLayout применяются три способа установки размеров:
Точные размеры , например, 123dp
.
Значение WRAP_CONTENT
, которое задает размеры, достаточные для размещения содержимого.
Значение 0dp
, эквивалентное MATCH_CONSTRAINT
в коде Java. В этом случае размеры элемента определяются его ограничениями и, по умолчанию, занимают всё доступное пространство.
Пример кода
Copy <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="160dp"
android:layout_height="wrap_content"
android:text="Top TextView"
android:textSize="30sp"
android:background="#e0e0e0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Center TextView"
android:textSize="30sp"
android:background="#e0e0e0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bottom TextView"
android:textSize="30sp"
android:background="#e0e0e0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Описание:
Верхний TextView
имеет точную ширину 160dp
.
Центральный TextView
имеет ширину 0dp
и растягивается на всё доступное пространство.
Нижний TextView
использует wrap_content
, занимая минимальную ширину для своего содержимого.
Рекомендации:
Избегайте использования match_parent
в виджетах внутри ConstraintLayout
. Используйте 0dp
(или MATCH_CONSTRAINT
) с ограничениями.
Пример растяжения элемента:
По ширине:
Copy android:layout_width="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
По высоте:
Copy android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
Минимальные и максимальные размеры
Минимальные размеры:
layout_constraintWidth_min
и layout_constraintHeight_min
.
Максимальные размеры:
layout_constraintWidth_max
и layout_constraintHeight_max
.
Пример:
Copy <TextView
android:layout_width="260dp"
android:layout_height="wrap_content"
android:text="Hello Android"
app:layout_constraintWidth_max="200dp"
app:layout_constraintHeight_max="200dp"
app:layout_constraintWidth_min="wrap"
app:layout_constraintHeight_min="wrap"/>
В данном случае ширина TextView
не превысит 200dp.
Размеры в процентах
Используются атрибуты:
layout_constraintWidth_percent
layout_constraintHeight_percent
Условия:
Размер (layout_width
или layout_height
) должен быть 0dp
(или MATCH_CONSTRAINT
).
Для ширины: app:layout_constraintWidth_default="percent"
.
Для высоты: app:layout_constraintHeight_default="percent"
.
Пример:
Copy <TextView
android:layout_width="0dp"
android:layout_height="0dp"
android:text="Hello Android"
app:layout_constraintWidth_default="percent"
app:layout_constraintHeight_default="percent"
app:layout_constraintWidth_percent="0.5"
app:layout_constraintHeight_percent="0.25"/>
Соотношение высоты и ширины
Атрибут layout_constraintDimensionRatio
задаёт соотношение Width:Height
.
Пример:
Copy <TextView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:text="Hello Android"
app:layout_constraintDimensionRatio="1:0.6"/>
Ширина элемента будет зависеть от содержимого, а высота составит 60% от ширины.
Пример с указанием ориентации:
Copy <TextView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="W, 1:4"/>
Здесь ширина будет в 4 раза меньше высоты.
Last updated 4 months ago