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

Я добавил 3 кнопки в ConstraintLayout. Я добавил кнопку для отключения или включения этих кнопок.

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

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

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

введите описание изображения здесь

  <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" />

comment
Взгляните, возможно, вам помогут цепочки: developer.android. com/reference/android/support/constraint/   -  person krossovochkin    schedule 10.02.2017


Ответы (2)


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

‹android.support.constraint.Group/›

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

Как добавить бета-версию ConstraintLayout в проект, выполните следующие действия.

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

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

затем в зависимостях app 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

Изменить: стабильная версия ConstraintLayout 1.1.0 выпущена 12 апреля 2018 г. https://androidstudio.googleblog.com/2018/04/constraintlayout-110.html

implementation 'com.android.support.constraint:constraint-layout:1.1.0'

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

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

и используйте:

<androidx.constraintlayout.widget.Group />
person Pavan    schedule 06.06.2017
comment
Можно ли изменить цвет фона для группы? - person Ibrahim Disouki; 19.06.2017
comment
@IbrahimDisouki, я думаю, что его сейчас нет, если я что-нибудь найду, я обновлю здесь. - person Pavan; 19.06.2017
comment
Это невозможно. Группы были созданы для управления видимостью своих членов, а не для просмотра позиционирования или чего-то в этом роде. - person Mauker; 15.01.2019
comment
Да, так как позиция групповых эталонных представлений может быть где угодно на экране, так что технически это не имеет никакого смысла. - person Pavan; 15.01.2019
comment
можно ли использовать androidx.constraintlayout.widget.Group для представлений, не являющихся частью Constraintlayout? - person lasec0203; 12.10.2020
comment
Ответ на мой вопрос выше - нет. Также вы не можете просто разместить androidx.constraintlayout.widget.Group в любом месте вашего файла макета, он должен иметь тот же родительский элемент androidx.constraintlayout.widget.ConstraintLayout, что и представления, на которые он ссылается. - person lasec0203; 12.10.2020

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

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

Изменить

С помощью Constraint layout:1.1.0-beta1 вы можете группировать представления, используя android.support.constraint.Group.

person Arnav Rao    schedule 23.04.2017