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

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

  • Три-пять направлений одинаковой важности
  • Компактные размеры окон
  • Согласованные пункты назначения на экранах приложений
Панель навигации с 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 , чтобы отобразить фактическое содержимое выбранного экрана.

Результат

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

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

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