android - 约束布局 - 组可见性在动态模块内不起作用

标签 android android-layout android-constraintlayout android-app-bundle

有没有人遇到过 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) 时,它给了我 TRUE。(即使组内的 View 仍然可见)

如有任何建议,我们将不胜感激。

最佳答案

已找到解决此问题的方法,我希望这会为其他人节省时间。这很奇怪,但这个问题的原因是在动态模块中使用了 ConstraintLayout - Group。

所以修复是在 java 代码中,一旦你获得了对组的引用,然后使用 int 数组设置引用 id,如下所示,

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});

在此之后,它按预期工作。因此无需设置组中各个 View 的可见性。

关于android - 约束布局 - 组可见性在动态模块内不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54944288/

相关文章:

Android Sqlite 数据库组建

android - 使用单个 ObjectAnimator 更改多个属性?

java - 动态设置约束小部件

Android - ConstraintLayout 以编程方式设置百分比高度?

android - ViewModel 和 ConstraintLayout Beta 2 。不兼容的类型 : Activity cannot be converted to LifecycleOwner

java - 在 Retrofit 2 中支持 @Streaming

java - ClassCastException 不知道在哪里

android - FrameLayout 里面的FrameLayout 和定位FrameLayout 右边的父FrameLayout?

android - ConstraintLayout,当约束依赖 View 消失时,布局 View 行为怪异

java - 带有动态对象和动态图标的自定义微调器