模拟Snackbar + CoordinatorLayout + FAB和新的MotionLayout

时间:2019-05-11 09:33:44

标签: android android-constraintlayout android-architecture-components android-snackbar android-motionlayout

假设我们有一个BottomNavigationBar,顶部有一个FAB。使用此设置并显示小吃栏时,小吃栏应出现在BottomNavigationBar上方,并在出现/关闭时向上/向下推FAB。

这是使用CoordinatorLayout的常见方案。 是否还可以使用新的MotionLayout创建此动画?

错误跟踪器中存在一个问题,但由于OP并未明确提出问题(https://issuetracker.google.com/issues/112665540),因此该问题已解决

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

更新:我知道一段代码可以作为回答此问题的起点。但是我想出的那段代码根本没有用。我现在指出了两个主要问题:

  1. 我不知道Snackbar的layout-id。因此,我不能在编写场景描述时使用它。

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以将布局文件设计为快餐栏位于布局层次结构中。您需要使用Constraintlayout的虚拟帮助器对象。虚拟对象是不可见的,但是在测量和布局过程中它们充当常规视图,因此其目的是帮助您创建所需的精确定位。

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