Как группировать несколько просмотров в ConstraintLayout

Я добавил 3 кнопки в ConstraintLayout. Я добавил кнопку, чтобы отключить или включить эти кнопки.

Если бы я использовал обычный LinearLayout. Я мог бы поместить все кнопки в линейный макет и включить или отключить этот конкретный макет.

Но я использую ConstraintLayout. Поэтому мне нужно отключить или включить все эти кнопки, я считаю, что в ConstraintLayout должен быть способ группировать различные представления.

Пожалуйста, объясните мне, как группировать представления в ConstriantLayout

enter image description here

  <Button
        android:text="Button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:layout_marginTop="16dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="16dp"
        android:layout_marginStart="16dp"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginLeft="16dp" />

    <Button
        android:text="Button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button2"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="16dp"
        android:layout_marginStart="8dp"
        app:layout_constraintLeft_toRightOf="@+id/button"
        android:layout_marginLeft="8dp"
        app:layout_constraintTop_toTopOf="@+id/button" />

    <Button
        android:text="Button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button3"
        app:layout_constraintTop_toTopOf="@+id/button2"
        android:layout_marginEnd="16dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginRight="16dp"
        android:layout_marginStart="8dp"
        app:layout_constraintLeft_toRightOf="@+id/button2"
        android:layout_marginLeft="8dp" />

Ответ 1

Да, насколько я знаю, вы можете управлять видимостью, используя линейную разметку, но не включать/отключать представления, я думаю, исправьте меня, если я ошибаюсь. Так что теперь в ConstraintLayout мы также можем управлять видимостью определенной группы представлений, используя группу

Это новая функция, представленная в ConstraintLayout, которая в настоящее время находится в бета-версии.

Как добавить бета-версию ConstraintLayout в проект, следуйте инструкциям ниже

добавить поддержку maven в файл проекта gradle, как показано ниже

allprojects {
    repositories {
        maven { url 'https://maven.google.com' }
        jcenter()
    }
}

затем в приложении gardle зависимости добавьте зависимость библиотеки ConstarintLayout

compile 'com.android.support.constraint:constraint-layout:1.1.0-beta3'

Теперь вы должны добавить группу в свой ConstraintLayout следующим образом

<android.support.constraint.Group
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:constraint_referenced_ids="button7,button3,button2"
        android:id="@+id/group" />  

где в группе идентификатор ссылки

app:constraint_referenced_ids="button7,button3,button2"

содержит разделенный запятыми идентификатор представления, который вы хотите обработать во время выполнения, поэтому в действии вы просто привязываете группу, как показано ниже, и обрабатываете видимость

import android.support.constraint.Group; //import statement in activity

Group group=(Group)findViewById(R.id.group);//bind view from xml
group.setVisibility(View.VISIBLE);//this will visible all views
group.setVisibility(View.GONE);//this will set Gone to all views
group.setVisibility(View.INVISIBLE);//this will set INVISIBLE to all view

РЕДАКТИРОВАТЬ стабильную версию ConrtsaintLayout 1.1.0, выпущенную 12 апреля 2018 года https://androidstudio.googleblog.com/2018/04/constraintlayout-110.html

реализация 'com.android.support.constraint: компоновка ограничений: 1.1.0'

Редактировать Android X Если кто-то использует пакет Android X, вы можете найти информацию о пакете здесь

https://developer.android.com/jetpack/androidx/migrate

Ответ 2

В настоящее время нет способа сделать это. Вы должны отключить каждую кнопку в отдельности, потому что ограничения добавляются к каждому виджету в ограничении.

Для группировки представлений вам нужно использовать группы представлений, которые не имеют смысла в контексте макета ограничений.

редактировать

С макетом ограничения: 1.1.0-бета1 вы можете группировать представления, используя android.support.constraint.Group.