侧边导航栏可让用户访问在大屏设备上运行的应用中的目标页面。您应该将侧边导航栏用于以下用途:
- 需要可在应用中的任何位置访问的顶级目标页面
- 三到七个主要目标页面
- 平板电脑或桌面设备布局
本页面介绍了如何在应用中显示侧边导航栏,以及相关界面和基本导航。
API Surface
将 NavigationRail 可组合项与 NavigationRailItem 结合使用,可在应用中实现侧边导航栏。NavigationRailItem 表示侧边导航栏列中的单个侧边导航栏项。
NavigationRailItem 包含以下关键参数:
selected:确定当前侧边导航栏项是否以视觉方式突出显示。onClick():一个必需的 lambda 函数,用于定义用户点击侧边导航栏项时要执行的操作。您通常在此处处理导航事件、更新所选侧边导航栏项的状态或加载相应内容。label:在侧边导航栏项中显示文本。可选。icon:在侧边导航栏项中显示图标。可选。
示例:基于侧边导航栏的导航
以下代码段实现了一个导航栏,以便用户可以在应用中的不同界面之间导航:
@Composable fun NavigationRailExample(modifier: Modifier = Modifier) { val navController = rememberNavController() val startDestination = Destination.SONGS var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } Scaffold(modifier = modifier) { contentPadding -> NavigationRail(modifier = Modifier.padding(contentPadding)) { Destination.entries.forEachIndexed { index, destination -> NavigationRailItem( selected = selectedDestination == index, onClick = { navController.navigate(route = destination.route) selectedDestination = index }, icon = { Icon( destination.icon, contentDescription = destination.contentDescription ) }, label = { Text(destination.label) } ) } } AppNavHost(navController, startDestination) } }
要点
NavigationRail会显示一个侧边导航栏项的垂直列,每个项对应一个Destination。val navController = rememberNavController()会创建并记住NavHostController的实例,该实例用于管理NavHost中的导航。var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }用于管理当前所选侧边导航栏项的状态。startDestination.ordinal用于获取Destination.SONGS枚举条目的数字索引(位置)。
- 点击侧边导航栏项时,系统会调用
navController.navigate(route = destination.route)以导航到相应界面。 NavigationRailItem的onClicklambda 会更新selectedDestination状态,以视觉方式突出显示点击的侧边导航栏项。- 它会调用
AppNavHost可组合项,并传递navController和startDestination,以显示所选界面的实际内容。
结果
下图显示了上一个代码段的结果: