Мне нужно применить некоторые ограничения к группе представлений в ConstraintLayout
. Я хочу сгруппировать эти представления и продолжить редактирование, в то время как дизайнер макета в студии Android рассматривает их как единое представление. Есть ли способ сделать это без фактической упаковки представлений с помощью ViewGroup
(другой макет)? Если такая оболочка необходима, может быть, есть оболочка оболочки, которая поставляется с ConstraintLayout
и позволяет группировать объекты без создания тяжелых макетов, таких как RelativeLayout
?
Недавно разработчики Android выпустили новую версию ConstraintLayout
(альфа-9 на сегодняшний день). Эта версия содержит новую важную функцию – Chains , которая позволяет группировать представления в ConstraintLayout
.
Цепочки обеспечивают групповое поведение на одной оси (горизонтально или вертикально).
Набор виджетов считается цепью, если они связаны друг с другом через двунаправленное соединение
Как только цепочка создается, есть две возможности:
- Распространение элементов в доступном пространстве
- Цепь также может быть «упакована», в этом случае элементы группируются вместе
В настоящее время для использования этой функции вам необходимо использовать следующую зависимость градиента (так как это альфа):
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha9'
Здесь вы можете найти новейшую версию ConstraintLayout
для использования в ваших проектах.
До Android Studio 2.3 разработчик пользовательского интерфейса Android Studio не поддерживал создание цепей, так как вы не могли добавить в него двунаправленные ограничения. Решением было создание этих ограничений в ручном XML, как упоминалось в TranslucentCloud . Начиная с Android Studio 2.3 (в настоящее время только на канальном канале), цепочки поддерживаются и в редакторе пользовательского интерфейса (как упоминалось в комментариях GoRoS ).
Ниже приведен пример того, как расположить два представления вместе в середине экрана с помощью ConstraintLayout
и цепей :
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="16dp" android:layout_marginStart="16dp" android:layout_marginTop="16dp" android:text="TextView" app:layout_constraintBottom_toTopOf="@+id/button" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.5" app:layout_constraintVertical_chainPacked="true"/> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:layout_marginEnd="16dp" android:layout_marginStart="16dp" android:layout_marginTop="8dp" android:text="Button" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView"/> </android.support.constraint.ConstraintLayout>
Вы можете использовать
android.support.constraint.Guideline
Группировать элементы вместе.
Добавьте руководство (вертикальное или горизонтальное), а затем используйте его как привязку для других видов. Вот простой пример горизонтального центрирования двух сгруппированных текстовых просмотров: (показ дизайна в AS)
<?xml version="1.0" encoding="utf-8"?> <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="56dp" android:background="@android:color/white" android:paddingLeft="16dp" android:paddingRight="16dp"> <TextView android:id="@+id/top_text" android:layout_width="wrap_content" android:layout_height="0dp" android:background="@android:color/holo_red_light" android:textSize="16sp" app:layout_constraintBottom_toTopOf="@+id/guideline" android:text="Above" tools:text="Above" /> <android.support.constraint.Guideline android:id="@+id/guideline" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.5" /> <TextView android:id="@+id/bottom_text" android:layout_width="wrap_content" android:layout_height="0dp" android:background="@android:color/holo_blue_bright" android:textSize="16sp" app:layout_constraintTop_toBottomOf="@+id/guideline" android:text="Below" tools:text="Below" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="Right vertically centered" android:textSize="24sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:text="Right vertically centered"/> </ConstraintLayout>