情况
我正在使用Kotlin
&编写一个非常简单的应用程序Android Jetpack Compose
我有一个scaffold
包含 mynavHost
和一个bottomBar
. 我可以使用它bottomBar
在三个主屏幕之间导航。其中一个主屏幕有一个详细信息屏幕,不应显示bottomBar
.
我的代码
到目前为止,这是小菜一碟:
// MainActivitys onCreate
setContent {
val navController = rememberAnimatedNavController()
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute = navBackStackEntry?.destination?.route?.substringBeforeLast("/")
BottomBarNavTestTheme {
Scaffold(
bottomBar = {
if (currentRoute?.substringBeforeLast("/") == Screen.Detail.route) {
MyBottomNavigation(
navController,
currentRoute,
listOf(Screen.Dashboard, Screen.Map, Screen.Events) // main screens
)
}
}
) { innerPadding ->
NavHost( // to be replaced by AnimatedNavHost
navController = navController,
startDestination = Screen.Dashboard.route,
modifier = Modifier.padding(innerPadding)
) {
composable(Screen.Dashboard.route) { DashboardScreen() }
composable(Screen.Map.route) { MapScreen { navController.navigate(Screen.Detail.route) } }
composable(Screen.Events.route) { EventsScreen() }
composable(Screen.Detail.route) { MapDetailScreen() }
}
}
}
}
问题:
我想在我的屏幕之间进行转换,所以我正在使用伴奏导航动画:只需替换NavHost
为AnimatedNavHost
.
从mainScreen
到导航时detailScreen
有一个奇怪的效果:
- bottomBar 隐藏
- 主屏幕调整大小:(见底部对齐的文字)
- 细节屏幕的动画发生。
这看起来很糟糕,我该如何解决?
解决方案
最佳解决方案如下所示:
- 主屏幕保持底部栏和淡出。
- 同时详细页面进入没有底栏。