Moh*_*yad 5 android kotlin bottomnavigationview android-jetpack android-jetpack-compose
我正在创建一个带有底部导航栏的简单应用程序。我想在向下滚动时隐藏底部导航栏,并在可组合屏幕中向上滚动时显示它。
任何帮助,将不胜感激。如果您需要更多代码,请告诉我。我已附上我认为与此问题相关的所有代码。
这是我的底部导航栏。
@Composable
fun BottomBar(navController: NavController) {
val items = listOf(
NavigationItem.Home,
NavigationItem.Search
)
BottomNavigation(
backgroundColor = MaterialTheme.colors.DarkRed,
contentColor = Color.White
) {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute = navBackStackEntry?.destination?.route
items.forEach { item ->
BottomNavigationItem(
selected = currentRoute == item.route,
icon = {
Icon(
imageVector = item.icon,
contentDescription = "Icon",
modifier = Modifier.size(28.dp)
)
},
alwaysShowLabel = false,
selectedContentColor = Color.White,
unselectedContentColor = Color.White.copy(0.4f),
onClick = {
navController.navigate(item.route){
// Pop up to the start destination of the graph to
// avoid building up a large stack of destinations
// on the back stack as users select items
navController.graph.startDestinationRoute?.let{route ->
popUpTo(route){
saveState = true
}
}
// Avoid multiple copies of the same destination when
// reselecting the same item
launchSingleTop = true
// Restore state when reselecting a previously selected item
restoreState = true
}
}
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的主屏幕
@Composable
fun MainScreen(){
val navController = rememberNavController()
Scaffold(topBar = {
ActionBar("Books")
},
bottomBar = {
BottomBar(navController)
}){
NavigationGraph(navController = navController)
}
}
Run Code Online (Sandbox Code Playgroud)
还有这个导航图
@Composable
fun NavigationGraph(navController: NavHostController){
NavHost(navController = navController, startDestination = NavigationItem.Home.route ){
composable(NavigationItem.Home.route){
HomeScreen()
}
composable(NavigationItem.Search.route){
SearchScreen()
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 aLazyListState来跟踪列表的状态,并且仅BottomBar在滚动状态索引初始时显示 。这可以通过以下方式完成:
对于惰性列:
@Composable
fun HomeScreen(scrollState: LazyListState) {
LazyColumn(
state = scrollState,
) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
对于导航图:
@Composable
fun NavigationGraph(navController: NavHostController, scrollState: LazyListState){
NavHost(navController = navController, startDestination = NavigationItem.Home.route ){
composable(NavigationItem.Home.route){
HomeScreen(scrollState = scrollState)
}
composable(NavigationItem.Search.route){
SearchScreen()
}
}
}
Run Code Online (Sandbox Code Playgroud)
在主屏幕中:
@Composable
fun MainScreen(){
val navController = rememberNavController()
val scrollState = rememberLazyListState()
Scaffold(topBar = {
ActionBar("Books")
},
bottomBar = {
if(scrollState.firstVisibleItemIndex == 0){
BottomBar(navController)
}
}){
NavigationGraph(navController = navController, scrollState = scrollState)
}
}
Run Code Online (Sandbox Code Playgroud)
这样,BottomBar只有当列表位于顶部时才会显示。
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |