Не може да се промени видимостта на изглед, към който се препраща вътре в група за ограничение

Не може да се промени видимостта на индивидуален изглед, който се препраща в рамките на constraintlayout Group

Използване на имплементация '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)


Ако видите документацията за 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);
            }
        }
    }
}

(източник)

За да постигнете това, което искате, ще трябва или да създадете множество групи, една, която включва индивидуалния изглед, който искате да промените сред останалите, и една с всички изгледи заедно. Ако искате да промените видимостта на един изглед, вие променяте видимостта на вашата по-малка група, в противен случай променяте видимостта на групата, която съдържа всички тях.

Във вашия случай, когато имате само два изгледа, това изглежда като нелепа идея. Така че мисля, че като алтернатива ще трябва да създадете свой персонализиран помощник за ограничения.

РЕДАКТИРАНЕ: Ето дискусия по същата тема

person Nikos Hidalgo    schedule 10.01.2020