android - 约束布局 - 组可见性在动态模块中不起作用
问题描述
有没有人遇到过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。(即使组内的视图仍然可见)
任何建议表示赞赏。
解决方案
找到了解决这个问题的方法,我希望这会为其他人节省时间。这很奇怪,但这个问题的原因是在动态模块内使用 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});
在此之后,它按预期工作。因此无需设置组中各个视图的可见性。
推荐阅读
- ionic2 - 如何从 Ionic 2 或 Ionic 3 中的 url 下载文件?
- prometheus - probe_success 和 up 的区别?
- reactjs - 垂直 FlatList 内水平 FlatList 的动态高度
- python - Python检查变量是否高于上次循环
- three.js - 加载纹理中的工件 - 三个 js
- android - Android+mysql:连接类返回一个Null对象
- react-grid-layout - 如何在 React-Grid-Layout 中实现静态大小的网格,如 3x3
- docker - Docker卷启动后一直退出
- raspberry-pi - Raspberry Pi 3 在尝试更新 64GB 卡时返回输入/输出错误并导致系统崩溃
- string - print(f"...:")-statement too long - 把它分成多行而不弄乱格式