Панель навигации позволяет пользователям переключаться между разделами приложения. Панели навигации следует использовать для:
- От трех до пяти направлений одинаковой важности
- Компактные размеры окон
- Единообразные пункты назначения на всех экранах приложения

На этой странице показано, как отобразить в приложении панель навигации со связанными экранами и базовой навигацией.
API поверхность
Используйте компонуемые элементы 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)} управляет состоянием текущего выбранного элемента. -
var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }управляет состоянием текущего выбранного элемента.-
startDestination.ordinalполучает числовой индекс (позицию) записи перечисленияDestination.SONGS.
-
- При щелчке по элементу вызывается
navController.navigate(route = destination.route)для перехода на соответствующий экран. - Лямбда-функция
onClickэлементаNavigationBarItemобновляет состояниеselectedDestination, чтобы визуально выделить выбранный элемент. - Он вызывает составной объект
AppNavHost, передаваяnavControllerиstartDestination, для отображения фактического содержимого выбранного экрана.
Результат
На следующем изображении показана панель навигации, полученная в результате предыдущего фрагмента:
