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

На этой странице показано, как отобразить в приложении панель навигации со связанными экранами и базовой навигацией.
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
, для отображения фактического содержимого выбранного экрана.
Результат
На следующем изображении показана панель навигации, полученная в результате предыдущего фрагмента:
