以编程方式在CoordinatorLayout中展开/折叠底部导航视图

3
我有一个包含BottomNavigationViewAppBarLayout(里面有一个ToolBar)的CoordinatorLayout。需要在特定事件发生时(例如在片段的onResume中),通过编程方式显示/隐藏AppBarLayoutBottomNavigationView。到目前为止,我已经成功使用appBarLayout.setExpanded(true, true)来显示/隐藏AppBar,但是我无法弄清楚如何对BottomNavigationView执行相同的操作,因为它没有任何用于显示/隐藏自身的方法。
我的BottomNavigationView的行为是在布局xml中设置的:app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"。我该如何在代码中获取对此行为的引用,以管理其展开/折叠状态?
2个回答

6

这段代码会将位于Coordinator Layout内并使用HideBottomViewOnScrollBehavior的底部导航栏向上滑动。

如果你正在使用findViewById,请将其替换为binding.

val layoutParams = binding.bottomNavigation.layoutParams as CoordinatorLayout.LayoutParams
val bottomViewNavigationBehavior = layoutParams.behavior as HideBottomViewOnScrollBehavior
bottomViewNavigationBehavior.slideUp(binding.bottomNavigation)

有没有办法检查它的状态?是否隐藏了? - undefined

-1

你可以从你的片段容器活动中隐藏bottomNavigation视图。因为你有bottomNavigation的id,你可以从你的片段容器活动访问这个id,还可以从你的片段容器活动获取当前片段实例。所以从你的例子来看,如果你想在特定的片段onResume()事件中隐藏底部导航栏,你可以检查一下当前可见的片段是哪一个,并调用隐藏或显示底部导航栏。

记住,为了隐藏或显示底部导航栏,请使用动画效果。


谢谢你的回复。我有一个对我的BottomNavigationView的引用,我面临的问题是如何使用通过编程定义的滚动动画来显示/隐藏它。因此,我需要获取行为的引用并在其上调用“show”或“hide”。 - undefined
为什么你需要行为的引用?你有滚动变化监听器对吧? - undefined
是的,我可以添加一个,但这是正确的方法吗?在 AppBarLayout 上有一个 setExpanded 方法,这是你应该使用的方式。是否有一种类似的方法可以用于 BottomNavigationView - undefined
我认为不是。你必须使用setVisiblility()函数。 - undefined
但是,当用户向上滚动时,BottomNavigationView将不会出现,这就打破了CoordinatorLayout和Behavior的设计初衷。如果我实现自己的onScrollListener,问题可能会得到解决。 - undefined
问题是什么时候你想要显示或隐藏底部导航视图?如果你想要在滚动时显示/隐藏它,它会与协调布局有自己的行为,并且会自行处理。如果你想要隐藏特定情况,比如当片段A出现时,你可以使用可见性。 - undefined

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