Навигация относится к взаимодействиям, которые позволяют пользователям перемещаться по различным частям контента вашего приложения, входить в них и выходить из них.
Компонент навигации Android Jetpack включает библиотеку навигации , подключаемый модуль Safe Args Gradle и инструменты, которые помогут реализовать навигацию в приложении. Компонент «Навигация» обрабатывает разнообразные варианты использования навигации: от простых нажатий кнопок до более сложных шаблонов, таких как панели приложений и панель навигации.
Ключевые понятия
В следующей таблице представлен обзор ключевых концепций навигации и основных типов, которые вы используете для их реализации.
Концепция | Цель | Тип |
---|---|---|
Хозяин | Элемент пользовательского интерфейса, содержащий текущий пункт назначения навигации. То есть, когда пользователь перемещается по приложению, приложение по существу меняет места назначения на хост навигации и обратно. |
|
График | Структура данных, которая определяет все пункты назначения навигации в приложении и то, как они соединяются друг с другом. | |
Контроллер | Центральный координатор управления навигацией между пунктами назначения. Контроллер предлагает методы навигации между пунктами назначения, обработки глубоких ссылок, управления обратным стеком и многого другого. | |
Место назначения | Узел в графе навигации. Когда пользователь переходит к этому узлу, хост отображает его содержимое. | Обычно создается при построении графа навигации. |
Маршрут | Уникально идентифицирует пункт назначения и все необходимые для него данные. Вы можете перемещаться по маршрутам. Маршруты доставят вас к местам назначения. | Любой сериализуемый тип данных. |
Преимущества и особенности
Компонент «Навигация» предоставляет ряд других преимуществ и функций, в том числе следующие:
- Анимации и переходы: предоставляет стандартизированные ресурсы для анимации и переходов.
- Глубокие ссылки: реализуют и обрабатывают глубокие ссылки, которые направляют пользователя непосредственно к месту назначения.
- Шаблоны пользовательского интерфейса: поддерживает такие шаблоны, как панели навигации и нижняя навигация, с минимальной дополнительной работой.
- Безопасность типов: включает поддержку передачи данных между пунктами назначения с безопасностью типов .
- Поддержка ViewModel: позволяет ограничить
ViewModel
навигационным графом для обмена данными, связанными с пользовательским интерфейсом, между пунктами назначения графа. - Транзакции фрагментов: полностью поддерживает и обрабатывает транзакции фрагментов.
- Назад и вверх: по умолчанию корректно обрабатываются действия назад и вверх.
Настройте свою среду
Чтобы включить поддержку навигации в свой проект, добавьте следующие зависимости в файл build.gradle
вашего приложения:
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.8.9" // 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" }
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.8.9" // 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
для перемещения между пунктами назначения на графике.
Кодлабы
- Изучите навигацию на реактивном ранце
- Фрагменты и компонент навигации
- Создайте адаптивное приложение с динамической навигацией.
Видео
- Навигационная навигация
- 10 лучших практик перехода к одному виду деятельности
- Отдельное мероприятие: почему, когда и как (Android Dev Summit '18)
- Android Jetpack: управление навигацией пользовательского интерфейса с помощью навигационного контроллера (Google I/O '18)
Образцы
These samples showcase different architectural approaches to developing Android apps. In its different branches you'll find the same app (a TODO app) implemented with small differences.
In this branch you'll find:
User Interface built with Jetpack Jetsnack is a sample snack ordering app built with Jetpack Compose.
To try out this sample app, use the latest stable version of Android Studio. You can clone this repository or import the project from Android Studio following the steps here.
This Jetnews is a sample news reading app, built with Jetpack Compose. The goal of the sample is to showcase the current UI capabilities of Compose.
To try out this sample app, use the latest stable version of Android Studio. You can clone this repository Jetcaster is a sample podcast app, built with Jetpack Compose. The goal of the sample is to showcase building with Compose across multiple form factors (mobile, TV, and Wear) and full featured architecture.
To try out this sample app, use the latest Jetchat is a sample chat app built with Jetpack Compose.
To try out this sample app, use the latest stable version of Android Studio. You can clone this repository or import the project from Android Studio following the steps here.
This sample Learn how this app was designed and built in the design case study, architecture learning journey and modularization learning journey.
This is the repository for the Now in Android app. It is a work in progress 🚧.
Now in Android is a fully functionalArchitecture
Jetsnack sample
Jetnews sample
Jetcaster sample 🎙️
Jetchat sample
Now in Android App