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

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

Использование реализации 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'

Пробовал с реализацией 'androidx.constraintlayout:constraintlayout:1.1.3' (стабильная версия), но не работает.

 <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:focusableInTouchMode="true">

        <View
            android:id="@+id/bgView"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="@drawable/full"
            app:layout_constraintBottom_toTopOf="@id/bulletinsRV"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <com.github.mikephil.charting.charts.PieChart
            android:id="@+id/chart"
            android:layout_width="0dp"
            android:layout_height="250dp"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:background="@color/white"
            android:onClick="@{(v)->handler.onClickPieChart(v)}"
            app:centerText="@{`Total Due:`+  vm.home.payment.totalAmount +` AED`}"
            app:centerTextSize="@{vm.home.payment.paymentStatus.equals(`FullyPaid`)?0F:12F}"
            app:description="@{vm.home.payment.paymentStatus.equals(`FullyPaid`)?``:`My payment`}"
            app:dueCleared="@{vm.home.payment.paymentStatus.equals(`FullyPaid`)}"
            app:goneWhen="@{vm.home.payment == null}"
            app:isRotationEnabled="@{false}"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:pieEntries="@{vm.pieEntries}"
            app:touchEnabled="@{false}" />

        <androidx.constraintlayout.widget.Group
            android:id="@+id/group"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:constraint_referenced_ids="bgView,chart"
            app:visibleIf="@{vm.isUnitInitialized}" />
    </androidx.constraintlayout.widget.ConstraintLayout>

person Abraham Mathew    schedule 10.01.2020    source источник
comment
попробуйте изменить код в build.gradle, используя эту реализацию "androidx.constraintlayout:constraintlayout:1.1.3"   -  person No Name    schedule 10.01.2020
comment
использовал это, но это не работает   -  person Abraham Mathew    schedule 10.01.2020


Ответы (1)


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

Этот класс управляет видимостью набора виджетов, на которые ссылаются. [...] Видимость группы будет применена к указанным виджетам. Это удобный способ легко скрыть/показать набор виджетов без необходимости поддерживать этот набор программно.

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

Класс Constraint Helper по умолчанию, отвечающий за настройку видимости представлений в группе, по-видимому, применяет одно и то же значение ко всем дочерним элементам группы, поэтому вы не сможете переопределить его индивидуально для некоторых представлений.

Это соответствующий код в помощнике по умолчанию:

 public void updatePreLayout(ConstraintLayout container) {
    int visibility = getVisibility();
    float elevation = 0;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        elevation = getElevation();
    }
    for (int i = 0; i < mCount; i++) {
        int id = mIds[i];
        View view = container.getViewById(id);
        if (view != null) {
            view.setVisibility(visibility);
            if (elevation > 0 && android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                view.setElevation(elevation);
            }
        }
    }
}

(источник)

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

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

EDIT: здесь обсуждение той же темы

person Nikos Hidalgo    schedule 10.01.2020