Групповые представления в ConstraintLayout обрабатывают их как единое представление

Мне нужно применить некоторые ограничения к группе представлений в 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> 
    Intereting Posts
    Есть ли разница между Java и Java Oracle, используемыми в Android? Как вернуться к конкретному действию, если действия выполняются одним классом Как изменить значок меню в панели действий? Просмотр корневых файлов / папок для Android в окнах Добавить представление в конце Webview Android 4.0.3. USB Host – связь с камерой Google Map API V2. Как сохранить маркер в центре экрана во время прокрутки карты? Невозможно создать экземпляр вложенного класса (расширяет broadcastReceiver) при создании sendBroadcast Android: избегайте разрыва строки в частях TextView String Разница между приложением не отвечает и к сожалению <Appname> остановился в Android? Запись PCM записанных данных в WAV-файл (java android) Содержимое Android Webview не должно быть потеряно при изменении ориентации, но графический интерфейс должен быть правильно обновлен Список воспроизведения ListView для Android ListView Возобновите действие вместо запуска, если оно уже существует в фоновом стеке ArrayAdapter повторяет заголовок UI для каждого элемента в ListView