使用新的MotionLayout模拟Snackbar + CoordinatorLayout + FAB

6
假设我们有一个底部导航栏和一个置顶的FAB。当使用此设置并显示Snackbar时,Snackbar应出现在底部导航栏上方,并在出现/消失时推动FAB上下。
这是使用CoordinatorLayout的常见情况。是否也可以使用新的MotionLayout创建此动画?
问题跟踪器中有一个问题,但已关闭,因为OP没有清楚地阐述问题(https://issuetracker.google.com/issues/112665540
我尝试时遇到的问题:我们无法访问Snackbar的布局ID。我们也无法访问Snackbar的一般xml,因此无法设置其约束条件。
更新:我理解提供一段代码作为答案的起点会有所帮助。但是,我想到的任何代码片段都没有用处。我现在确定了两个主要问题:
  1. 我不知道Snackbar的layout-id,因此无法在编写场景描述时使用它。

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

评论: @mikejonesguy 是的,在我看来它们很相似。虽然不完全一样,但MotionLayout也有你所描述的功能:协调其子视图之间的交互。将“coordinate”替换为“animate”,你就会明白我的意思。还可以查看OnSwipe/OnClick处理程序。MotionLayout仍然非常新颖,但我认为它将取代CoordinatorLayout,就像ConstraintLayout取代RelativeLayout一样。也许我错了,也许不是...时间会证明一切。

结论: 就我而言,目前似乎没有仅使用MotionLayout就能实现我想要的方式。如果有一天可能实现,我会用一个有效的示例更新这个问题。对于无法实现的悬赏,我感到抱歉... :)


1
请提供相关的编程内容,尽可能地附上代码。 - Pravin Divraniya
1
你尝试过什么?没有人会为你编写代码,只要试一试,如果你在某个地方失败或需要帮助,那么 Stack Overflow 就在那里。 - Akash Dubey
你把MotionLayout和CoordinatorLayout描述得好像它们是类似的东西。但它们并不相同。CoordinatorLayout的职责是协调其子视图之间的交互(例如,当SnackBar出现时,FAB会向上动画等)。而MotionLayout没有这个职责。那么,是否可能实现呢?也许吧。但你需要发布一些代码,以便我们可以看到你正在使用什么。 - mikejonesguy
我已经发布了一个答案。如果它让你感到困惑,请发出你当前的代码,我会修改它以达到你需要的效果。 - Nezih Yılmaz
你是否在问题跟踪器上为这个特定的用例创建了一个新问题?或者在推特上@开发MotionLayout的人?我为我的用例这样做了,他们在一次更新后接受了并添加了支持。 - ZeroStatic
是的,也许这是个好主意。正如我所说,已经有一个问题了,但描述得不太清楚。也许我会在另一个工单中再次提出这个问题。 - muetzenflo
1个回答

1
你可以将Snackbar设计成与布局层次结构中的一样。您需要使用Constraintlayout的虚拟辅助对象。虚拟对象是不可见的,但它们在测量和布局期间充当常规视图,因此它们的目的是帮助您创建所需的精确位置。
Snackbar的默认高度为最小48dp,最大80dp。 您将需要此信息。

很酷,我不知道有虚拟助手对象。我会在有时间再次为这个项目测试它(可能需要一周)。如果这是所需的提示,你将得到赏金 :) - muetzenflo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接