Навигация — это интерактивные элементы, позволяющие пользователям перемещаться между различными частями контента в вашем приложении, переходить к ним и возвращаться обратно.
Компонент Navigation в Android Jetpack включает в себя библиотеку Navigation , плагин Safe Args Gradle и инструменты для реализации навигации в приложении. Компонент Navigation обрабатывает различные сценарии навигации, от простых нажатий кнопок до более сложных шаблонов, таких как панели приложений и выдвижная панель навигации.
Ключевые понятия
В приведенной ниже таблице представлен обзор ключевых концепций навигации и основных типов, используемых для их реализации.
Концепция | Цель | Тип |
|---|---|---|
Хозяин | Элемент пользовательского интерфейса, содержащий текущую точку назначения навигации. То есть, когда пользователь перемещается по приложению, приложение, по сути, меняет местами точки назначения в основном элементе навигации. |
|
График | Структура данных, определяющая все навигационные элементы внутри приложения и способы их связи друг с другом. | |
Контроллер | Центральный координатор для управления навигацией между пунктами назначения. Контроллер предоставляет методы для навигации между пунктами назначения, обработки прямых ссылок, управления стеком возврата и многого другого. | |
Место назначения | Узел в графе навигации. Когда пользователь переходит к этому узлу, хост отображает его содержимое. | Обычно создается при построении навигационного графа. |
Маршрут | Уникально идентифицирует пункт назначения и все необходимые для него данные. Вы можете перемещаться по маршрутам. Маршруты приведут вас к месту назначения. | Любой сериализуемый тип данных. |
Преимущества и особенности
Компонент навигации предоставляет ряд других преимуществ и функций, в том числе следующие:
- Анимация и переходы: Предоставляет стандартизированные ресурсы для анимации и переходов.
- Глубокие ссылки: Реализует и обрабатывает глубокие ссылки, которые ведут пользователя непосредственно к нужному ресурсу.
- Шаблоны пользовательского интерфейса: Поддерживает такие шаблоны, как выдвижные панели навигации и нижняя панель навигации, с минимальными дополнительными усилиями.
- Типобезопасность: включает поддержку передачи данных между целевыми устройствами с обеспечением типобезопасности .
- Поддержка ViewModel: позволяет ограничить область действия
ViewModelграфом навигации для обмена данными, связанными с пользовательским интерфейсом, между целевыми элементами графа. - Фрагментные транзакции: Полностью поддерживает и обрабатывает фрагментные транзакции.
- Назад и вверх: по умолчанию корректно обрабатывает действия «назад» и «вверх».
Параметры фреймворка
Компонент «Навигация» поддерживает две основные платформы для реализации графа навигации, в зависимости от архитектуры пользовательского интерфейса вашего приложения:
- Compose : Если ваше приложение полностью создано с помощью Jetpack Compose, используйте Navigation Compose. Пункты назначения в вашем графе являются компонуемыми объектами.
- Фрагменты : Если ваше приложение использует Views или их комбинацию, используйте компонент навигации на основе фрагментов. Пунктами назначения в вашем графе являются фрагменты, которые могут содержать стандартные Views, контент Compose или их комбинацию.
Для приложений, переходящих с Views на Compose, рекомендуется продолжать использовать компонент навигации на основе фрагментов, одновременно преобразуя отдельные экраны в Compose. После того, как все фрагменты будут заменены на компонуемые элементы, можно перенести граф навигации в Navigation Compose.
Настройте свою среду
Чтобы добавить поддержку навигации в ваш проект, добавьте следующие зависимости в файл build.gradle вашего приложения:
Groovy
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21' } dependencies { def nav_version = "2.9.8" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
Kotlin
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.9.8" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
Для получения информации о добавлении других архитектурных компонентов в ваш проект см. раздел «Добавление компонентов в ваш проект» .
Следующие шаги
Для получения дополнительной документации и ресурсов, связанных с компонентом навигации, см. следующие ресурсы.
Подробные руководства
Для получения более подробной информации о том, как реализовать хост навигации и NavController , а также о том, как они взаимодействуют с Compose и другими фреймворками пользовательского интерфейса, см. следующие руководства:
- Создание контроллера навигации : В этом разделе описывается, как создать контроллер
NavController. - Создание графа навигации : Подробно описано, как создать хост навигации и граф навигации.
- Перемещение к месту назначения : демонстрирует, как использовать
NavControllerдля перемещения между пунктами назначения в вашем графе.
Кодлабс
- Изучите навигацию с помощью Jetpack.
- Фрагменты и компонент навигации
- Создайте адаптивное приложение с динамической навигацией.
Видео
- Навигация
- 10 лучших практик для перехода к одному виду деятельности
- Единая активность: почему, когда и как (Android Dev Summit '18)
- Android Jetpack: Управление навигацией пользовательского интерфейса с помощью контроллера навигации (Google I/O '18)