Панель навигации позволяет пользователям переключаться между разделами приложения. Ее следует использовать:
- Три–пять пунктов назначения одинаковой важности.
- Компактные размеры окон
- Единые целевые страницы для всех экранов приложения
На этой странице показано, как отобразить панель навигации в приложении со связанными экранами и базовой навигацией.
API surface
Используйте composable-функции NavigationBar и NavigationBarItem, чтобы реализовать логику переключения между пунктами назначения. Каждый объект NavigationBarItem представляет собой отдельный пункт назначения.
NavigationBarItem включает следующие основные параметры:
selected: определяет, выделен ли текущий элемент визуально.onClick()– определяет действие, которое выполняется, когда пользователь нажимает на элемент. Здесь должна быть логика для обработки событий навигации, обновления состояния выбранного элемента или загрузки соответствующего контента.label– текст, который будет показываться в элементе. Необязателен.icon: показывает значок в элементе. Необязателен.
Пример: нижняя панель навигации
В следующем фрагменте кода реализована нижняя панель навигации с элементами, позволяющими пользователям перемещаться между различными экранами в приложении:
@Composable fun NavigationBarExample(modifier: Modifier = Modifier) { val navController = rememberNavController() val startDestination = Destination.SONGS var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } Scaffold( modifier = modifier, bottomBar = { NavigationBar(windowInsets = NavigationBarDefaults.windowInsets) { Destination.entries.forEachIndexed { index, destination -> NavigationBarItem( selected = selectedDestination == index, onClick = { navController.navigate(route = destination.route) selectedDestination = index }, icon = { Icon( destination.icon, contentDescription = destination.contentDescription ) }, label = { Text(destination.label) } ) } } } ) { contentPadding -> AppNavHost(navController, startDestination, modifier = Modifier.padding(contentPadding)) } }
Основные положения
NavigationBarпоказывает коллекцию элементов, каждый из которых соответствуетDestination.val navController = rememberNavController()создает и запоминает экземплярNavHostController, который управляет навигацией вNavHost.var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }управляет состоянием выбранного элемента.startDestination.ordinalвозвращает числовой индекс (позицию) записи перечисленияDestination.SONGS.
- При нажатии на элемент вызывается
navController.navigate(route = destination.route)для перехода к соответствующему экрану. - Лямбда-выражение
onClickэлементаNavigationBarItemобновляет состояниеselectedDestination, чтобы визуально выделить выбранный элемент. - Логика навигации вызывает composable-функцию
AppNavHost, передаваяnavControllerиstartDestination, чтобы показать контент выбранного экрана.
Результат
На изображении ниже показана панель навигации, созданная с помощью предыдущего фрагмента кода.