我创建一个简单的应用程序与底部导航和抽屉。
我把所有的屏幕都包在一个有顶栏和底栏的脚手架里。我想隐藏顶部酒吧和底部酒吧在特定的屏幕上。有谁知道如何实现这一点
下面是设置导航的代码。
val navController = rememberNavController()
val scaffoldState = rememberScaffoldState(rememberDrawerState(DrawerValue.Closed))
Scaffold(
bottomBar = {
AppBottomBar(navController)
},
topBar = {
AppTopBar(scaffoldState)
},
drawerContent = {
DrawerContent(navController, scaffoldState)
},
scaffoldState = scaffoldState
) {
// ovoid bottom bar overlay content
Column(modifier = Modifier.padding(bottom = 58.dp)) {
AppNavigation(navController)
}
}
AppNavigation
包含用于导航到屏幕的NavHost
5条答案
按热度按时间tjjdgumg1#
我建议你使用
AnimatedVisibility
为BottomNavigation
小部件和TopAppBar
小部件,我认为这是最清晰的方式组成。1.您应该使用
remeberSaveable
来存储BottomBar和TopAppBar的状态:1.在可组合函数中,我们使用
when
来控制BottomBar和TopAppBar的状态,下面我们将bottomBarState
和topBarState
设置为true
,如果我们想显示BottomBar和TopAppBar,否则我们将bottomBarState
和topBarState
设置为false
:**重要提示:**Scaffold来自Comparist,在build. gradle中初始化。我们使用来自陪伴者的脚手架,因为我们需要完全控制填充,例如在默认的脚手架中,如果我们有TopAppBar,我们就不能禁用顶部内容的填充。在我们的例子中,它是必需的,因为我们有TopAppBar的动画,内容应该在TopAppBar下,我们手动控制每个页面的填充。陪同人员提供的文件:https://google.github.io/accompanist/insets/。
1.将
BottomNavigation
放入AnimatedVisibility
中,从bottomBarState
设置visible
值,并设置enter
和exit
动画,在我的例子中,我使用slideInVertically
作为enter
动画,slideOutVertically
作为exit
动画:1.将
TopAppBar
放入AnimatedVisibility
中,从topBarState
设置visible
值,并设置enter
和exit
动画,在我的例子中,我使用slideInVertically
作为enter
动画,slideOutVertically
作为exit
动画:MainActivity的完整代码:
结果:
不要忘记使用@ExperimentalAnimationApi注解来编写函数。
**更新:**Compose 1.1.0及以上版本
@ExperimentalAnimationApi
不需要。**22.02.2022更新:**我做了一些研究,并更新了第2点。现在我们使用
when
来控制topBarState
和bottomBarState
。完整代码在gitHub上提供:https://github.com/AndreiRoze/BottomBarAnimation/tree/with_animated_topbar
官方文档中提供的动画示例:https://developer.android.com/jetpack/compose/animation
pprl5pva2#
现在,我可以通过检查当前路由来显示或隐藏bottomBar和topBar来实现这一点。但我认为一定有更好的解决办法。我把所有屏幕都包在Scaffold里面的方式可能不对。
af7jpaap3#
我发现的最简单的解决方案(无动画)
iklwldmw4#
这对我很有效。您从currentRoute函数获取当前路线,并检查您的bottombar composable以隐藏或显示BottomNavigationView。
vuktfyat5#
你可以使用
compositionlocal
,当你用CompositionLocalProvider
Package 你的mainActivity时,将supportActionBar传递给你的子组合在你希望隐藏topBar的屏幕上,调用顶部的.hide()方法。见下文:在mainActivity中,通过
在屏幕上调用>>
LocalAppBar.current.show?.hide()