如何让Snackbar显示在底部按钮上方?
解决Snackbar显示在底部按钮下方的问题
问题分析
你的布局基于CoordinatorLayout实现,底部FrameLayout通过HideBottomViewOnScrollBehavior实现滚动隐藏逻辑。当前Snackbar默认以布局根视图为容器,会显示在CoordinatorLayout最底部区域,被底部按钮遮挡或置于其下方;即使将按钮容器设为Gone,由于该滚动Behavior的布局计算特性,Snackbar的位置仍会受原容器空间影响,无法自动上移。
解决方案
使用Snackbar提供的setAnchorView()方法,将底部按钮容器指定为锚点,让Snackbar自动显示在锚点视图的上方,具体修改如下:
修改Snackbar显示代码
Snackbar.make(binding.mainCoordinator, message, length) .setAnchorView(binding.buttons) .show()
关键说明
- 指定正确的协调容器:将Snackbar的创建参数从
binding.root改为binding.mainCoordinator,确保Snackbar依托CoordinatorLayout完成布局协调。 - 锚点定位:
setAnchorView(binding.buttons)会让Snackbar自动对齐到底部按钮容器的上方,无论按钮处于显示还是滚动隐藏状态,都能保证Snackbar处于可见区域且位于按钮层级之上。
额外注意事项
- 确保项目依赖了最新版的Material组件库,
setAnchorView()是Material Design组件提供的标准方法。 - 无需手动将底部按钮容器设为
Gone,通过锚点设置即可实现Snackbar与底部按钮的正确层级关系。
内容的提问来源于stack exchange,提问作者Mihail Lovchitskiy
相关产品推荐
相关产品推荐

