我必须在运动布局中缺少android:visibility更改。这是我的布局的简化版。

<MotionLayout>
 <ImageView android:id="@+id/HeaderBackground" />
Bunch of image views, Text views that are constrainted to the HeaderBackground.
<RecyclerView android:visibility="visible">
<EditText android:visibility="visible">
<CustomViewGroup1 android:visibility="gone">
</MotionLayout>

我有一个MotionScreen,它根据回收者 View 设置了一个onswipe过渡,以减少HeaderBackground的高度并隐藏一些图像/文本 View (即折叠工具栏)。
但是,如果出现一些致命错误,我想在RecyclerView的顶部/前面显示CustomViewGroup1,但是将RecyclerView的可见性切换为“消失”,而将CustomViewGroup1切换为可见,则不会显示CustomViewGroup1。

我可以将CustomViewGroup组从MotionLayout中移出,并添加framelayout作为 Activity 的根,并隐藏整个MotionLayout。但这并不理想,因为我必须复制工具栏和图标。所以我想这个问题是关于可见性的变化和潜在的z排序的?

我正在使用androidx.constraintlayout:constraintlayout:2.0.0-beta2

最佳答案

原来这是我对MotionLayout的工作方式缺乏经验。默认情况下,MotionLayout控制其中所有 View 的可见性。但是您可以通过使用app:visibilityMode="ignore"属性来选择 subview ,以在<ConstraintSet>中定义 View

在我的情况下,<CustomViewGroup1>看起来像这样...

<Constraint
      android:id="@id/CustomViewGroup1"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toBottomOf="@+id/HeaderBackground"
      app:layout_constraintVertical_weight="1"
      app:visibilityMode="ignore" />

而且在中定义相同,约束和扩展了ConstraintSets,因为在滚动回收器 View 时我不希望其移动/动画。

感谢John Hoford在另一个 channel 中提供的建议。

关于android - android:MotionLayout子级的可见性更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57168071/

10-10 20:08