6

假设我们有一个底部导航栏,顶部有一个 FAB。使用此设置并显示 Snackbar 时,Snackbar 应出现在 BottomNavigationBar 上方,并在出现/消失时向上/向下推动 FAB。

这是使用 CoordinatorLayout 的常见场景。是否也可以使用新的 MotionLayout 创建这个动画?

错误跟踪器中存在问题,但它已经关闭,因为 OP 没有明确提出问题(https://issuetracker.google.com/issues/112665540

我在尝试时遇到的问题:我们无权访问 Snackbar 的 layout-id。我们也无法访问 Snackbar 的通用 xml,因此我们无法设置其约束。

更新:我知道一段代码将有助于作为回答这个问题的起点。但是我想出的任何一段代码都没有用。我现在指出了两个主要问题:

  1. 我不知道 Snackbar 的 layout-id。因此我不能用它来写场景描述。

  2. 即使我可以创建场景描述(例如 State1:​​SnackBar 可见,State2:Snackbar 不可见)。我必须手动触发这些场景转换。这意味着我将重新创建自己的 Snackbar,而不是按预期使用原始 Snackbar。

评论: @mikejonesguy 是的,在我看来它们是相似的。不一样,但很相似。而且 MotionLayout 也确实有您描述的工作:协调其子视图之间的交互。用“动画”替换“坐标”,你就会明白我的意思了。还可以查看 OnSwipe/OnClick 处理程序。MotionLayout 还是很新鲜的,但我认为它会在未来取代 CoordinatorLayout,就像 ConstraintLayout 取代 RelativeLayout 一样。也许我错了,也许不是……时间会证明一切。

结论: 就我而言,似乎没有办法(还)仅通过使用 MotionLayout 来实现我想要的。如果有可能有一天,我会用一个工作示例来更新这个问题。对不起,不可能的赏金...... :)

4

1 回答 1

1

您可以设计您的布局文件,就好像小吃栏在您的布局层次结构中一样。您需要使用 Constraintlayout 的虚拟辅助对象。虚拟对象是不可见的,但它们在测量和布局期间充当常规视图,因此它们的目的是帮助您创建所需的精确定位。

小吃店的默认高度是最小 48dp 和最大 80dp。您将需要这些信息。

于 2019-05-20T20:33:16.983 回答