Схема ограничения - видимость группы не работает внутри динамического модуля - PullRequest
0 голосов
/ 01 марта 2019

Кто-нибудь испытывал проблемы с ConstraintLayout видимостью группы?Я использую ConstraintLayout 1.1.3, и я устанавливаю видимость группы в макете XML и коде Java.Но это не меняет статус видимости.Это всегда видно.

Это файл макета

 <?xml version="1.0" encoding="utf-8"?>
 <android.support.constraint.ConstraintLayout  
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

<ImageView
    android:id="@+id/iv_message_icon_activity_dictionary"
    android:layout_width="@dimen/message_icon_width"
    android:layout_height="@dimen/message_icon_height"
    android:layout_marginBottom="@dimen/message_text_view_margin_top"
    android:contentDescription="@string/app_name"
    android:src="@drawable/icon_error"
    app:layout_constraintBottom_toTopOf="@+id/tv_message_activity_dictionary"
    app:layout_constraintEnd_toEndOf="@id/tv_message_activity_dictionary"
    app:layout_constraintStart_toStartOf="@id/tv_message_activity_dictionary" />

<TextView
    android:id="@+id/tv_message_activity_dictionary"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="20dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:layout_marginStart="20dp"
    android:gravity="center"
    android:textColor="@color/black"
    android:textSize="@dimen/medium_text_size"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:text="@string/msg_no_internet" />

<Button
    android:id="@+id/btn_try_again_activity_dictionary"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/try_again_button_margin_top"
    android:background="@drawable/rounded_button"
    android:minHeight="30dp"
    android:minWidth="@dimen/try_again_button_width"
    android:padding="10dp"
    android:text="@string/btn_try_again"
    android:textAllCaps="false"
    android:textColor="@color/white"
    android:textSize="@dimen/text_size_5"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tv_message_activity_dictionary" />

<android.support.constraint.Group
    android:id="@+id/group_component_activity_dictionary"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    app:constraint_referenced_ids="btn_try_again_activity_dictionary,tv_message_activity_dictionary,iv_message_icon_activity_dictionary" />

</android.support.constraint.ConstraintLayout>

В чем может быть причина этого?

ОБНОВЛЕНИЕ:

Я забыл упомянуть, что я использую этот макет внутри динамического модуля.Также я проверил это с помощью базового модуля, и он работает как положено, но не в динамическом модуле.Итак, наконец, я выяснил причину проблемы.Также, когда я отлаживал код и оценивал это выражение (group.getVisibility == View.GONE), он давал мне значение ИСТИНА (хотя представления внутри группы все еще видны)

Любое предложениеоценили.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

У меня возникла та же проблема с использованием ConstraintLayout v1.1.3.Я устанавливал видимость группы в XML, но она не работала.

Поскольку ConstraintLayout v2.0.0 уже находится на бета-версии, я мигрировал с v1.1.3 на v2.0.0-beta2 (проверьте последнийверсия ) и проблема больше не происходит.Теперь я могу без проблем изменить видимость группы из XML или кода.

0 голосов
/ 02 марта 2019

Нашли исправление для этой проблемы, и я надеюсь, что это сэкономит время для кого-то еще.Странно, но причиной этой проблемы является использование ConstraintLayout - Group внутри динамического модуля.

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

Group group = findViewById(R.id.group);
group.setReferencedIds(new int[]{R.id.btn_try_again_activity_dictionary, R.id.tv_message_activity_dictionary, R.id.iv_message_icon_activity_dictionary});

После этого он работает как положено.Поэтому нет необходимости устанавливать видимость отдельных представлений в группе.

...