Невозможно изменить видимость представления, на которое ссылается группа ограничений - PullRequest
0 голосов
/ 10 января 2020

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

Использование реализация '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>

1 Ответ

0 голосов
/ 10 января 2020

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

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

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

Класс 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);
            }
        }
    }
}

( источник )

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

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

РЕДАКТИРОВАТЬ: Вот обсуждение на ту же тему c

...