android - MotionLayout 中的 ViewStub 保持不可见
问题描述
我有一个现有的 ConstraintLayout,其中包含一些视图和一个 ViewStub。我将它转换为 MotionLayout 但 ViewStub 不会出现。
我有以下布局:
<MotionLayout app:layoutDescription="@xml/motion_scene">
<Button id="button01"/>
<ViewStub id="stub" inflatedId="merger"/>
</MotionLayout>
对于给定的运动场景:
<MotionScene>
<Transition
app:constraintSetStart="@id/start"
app:constraintSetEnd="@id/end">
<OnClick app:clickAction="toggle" app:targetId="button"/>
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint android:id="@id/button" ...>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint android:id="@id/button" ...>
</ConstraintSet>
</MotionScene>
在我的活动中,我将 ViewStub 的可见性设置为 View.VISIBLE。当我使用没有动态场景的 ConstraintLayout 或 MotionLayout 时,它可以工作,这意味着视图存根被其内容正确替换并且所有内容都是可见的。 当我使用运动场景时,按钮的动画可以正确播放,但 ViewStub 的膨胀布局是不可见的(我猜没有消失,因为我可以在布局检查器中看到它)。
我尝试使用该属性
应用程序:visibilityMode="忽略"
没有成功
是因为 MotionLayout 仍在开发中还是我错过了什么?(另一个 wrap_content 问题?)。
先感谢您 !
解决方案
一些笔记。首先,为了让 viewStub 出现,它必须被膨胀,而不仅仅是可见性集。因此,请确保您stub.inflate()
在代码中的某个位置调用。
此外,您希望出现在 MotionLayout 中的任何视图都应在motionScene 中使用约束进行定义。所以如果你期望有一个膨胀的视图,那个膨胀的视图应该在约束中。像这样的东西:
<MotionScene>
<Transition
app:constraintSetStart="@id/start"
app:constraintSetEnd="@id/end">
<OnClick app:clickAction="toggle" app:targetId="button"/>
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint android:id="@id/button" ...>
<Constraint android:id="@id/merger" ...>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint android:id="@id/button" ...>
<Constraint android:id="@id/merger" ...>
</ConstraintSet>
试试看,让我知道结果如何!
推荐阅读
- python-3.x - Pandas 条件语句和替换
- makefile - rpmbuild 退出并出现错误:找不到文件
- flutter - 从现有 Flutter 项目中删除 Web 部件
- excel - 来自 UDF 的意外错误,用于检查是否可以找到文件
- python - 在 Windows 上安装张量流时出错
- python - 在开源 Python 脚本中存储我的 API 密钥的位置
- c# - 无法将已执行命令的输出存储在文件 c# 控制台应用程序中
- javascript - Bootstrap Vue b-toast 不会触发第二次
- java - java中管道gitlab-ci期间使用openjdk8出现错误SonarCloud
- r - 何时以及为什么不对某些函数及其输入采样随机数生成器?