Панель навигации

Панель навигации позволяет пользователям переключаться между пунктами назначения в приложении. Вам следует использовать панели навигации для:

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

На этой странице показано, как отобразить в приложении панель навигации со связанными экранами и базовой навигацией.

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 , для отображения фактического содержимого выбранного экрана.

Результат

На следующем изображении показана панель навигации, полученная в результате предыдущего фрагмента:

Экран приложения с 3 пунктами назначения, перечисленными горизонтально в нижней навигационной панели: Песни, Альбом и Плейлист. Каждому пункту назначения соответствует соответствующий значок (например, музыкальная нота для «Песни»).
Рисунок 2. Панель навигации, содержащая 3 пункта назначения с соответствующими значками: «Песни», «Альбом» и «Плейлист».

Дополнительные ресурсы