A navegação se refere às interações que permitem aos usuários navegar, entrar e sair de diferentes partes do conteúdo no app.
O componente Navigation do Android Jetpack inclui a biblioteca Navigation, o plug-in Safe Args do Gradle e ferramentas para ajudar você a implementar a navegação no app. O componente Navigation processa diversos casos de uso de navegação, desde cliques simples em botões até padrões mais complexos, como barras de apps e a gaveta de navegação.
estabelecido.Principais conceitos
A tabela abaixo oferece uma visão geral dos principais conceitos da navegação e os principais tipos usados para implementá-los.
Conceito |
Objetivo |
Tipo |
|---|---|---|
Host |
Um elemento da interface que contém o destino de navegação atual. Ou seja, quando um usuário navega em um app, o app basicamente troca os destinos dentro e fora do host de navegação. |
|
Gráfico |
Uma estrutura de dados que define todos os destinos de navegação no app e como eles se conectam. |
|
Controlador |
O coordenador central para gerenciar a navegação entre destinos. O controlador oferece métodos para navegar entre destinos, processar links diretos, gerenciar a backstack e muito mais. |
|
Destino |
Um nó no gráfico de navegação. Quando o usuário navega até esse nó, o host mostra o conteúdo dele. |
Geralmente criado ao construir o gráfico de navegação. |
Rota |
Identifica exclusivamente um destino e todos os dados necessários para ele. É possível navegar usando rotas. As rotas levam você aos destinos. |
Qualquer tipo de dados serializáveis. |
Benefícios e recursos
O componente Navigation oferece vários outros benefícios e recursos, incluindo:
- Animações e transições: fornecem recursos padronizados para animações e transições.
- Link direto: implementa e processa links diretos que levam o usuário diretamente a um destino.
- Padrões de interface:oferece suporte a padrões, como as gavetas de navegação e a navegação de nível baixo, com o mínimo de trabalho extra.
- Segurança de tipos: inclui suporte para transmitir dados entre destinos com segurança de tipos.
- Suporte ao ViewModel:permite definir o escopo de um
ViewModelpara um gráfico de navegação para compartilhar dados relacionados à interface entre os destinos do gráfico. - Transações de fragmentos: oferecem suporte e processam totalmente transações de fragmentos.
- Voltar e subir: processa ações de voltar e subir corretamente por padrão.
Opções de framework
O componente Navigation oferece suporte a dois frameworks principais para implementar o gráfico de navegação, dependendo da arquitetura da interface do app:
- Compose: se o app for totalmente criado com o Jetpack Compose, use o Navigation Compose. Os destinos no gráfico são combináveis.
- Fragments: se o app usar visualizações ou uma combinação de visualizações e Compose, use o componente de navegação baseado em fragmentos. Os destinos no gráfico são fragmentos que podem hospedar visualizações padrão, conteúdo do Compose ou uma combinação dos dois.
Para aplicativos que estão migrando de visualizações para o Compose, a estratégia recomendada é continuar usando o componente de navegação baseado em fragmentos ao converter telas individuais para o Compose. Depois que todos os fragmentos forem substituídos por combináveis, você poderá migrar o gráfico de navegação para o Navigation Compose.
Configurar o ambiente
Para incluir suporte à navegação no seu projeto, adicione as dependências abaixo
ao arquivo build.gradle do seu app:
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") }
Para informações sobre como adicionar outros componentes de arquitetura ao projeto, consulte Como adicionar componentes ao seu projeto.
Próximas etapas
Para conferir mais documentações e recursos relacionados ao componente Navigation, consulte as informações abaixo.
Guias detalhados
Para mais informações sobre como implementar um host de navegação e um NavController,
bem como detalhes sobre como eles interagem com o Compose e outros frameworks de interface, consulte
os guias abaixo:
- Criar um controlador de navegação: descreve como criar um
NavController. - Criar um gráfico de navegação: detalha como criar um host e um gráfico de navegação.
- Navegar para um destino: demonstra como usar um
NavControllerpara se mover entre os destinos no gráfico.
Codelabs
- Aprender a usar a navegação no Jetpack
- Fragmentos e o componente de navegação
- Criar um app adaptável com a navegação dinâmica
Vídeos (em inglês)
- Navegação
- 10 práticas recomendadas para migrar para uma atividade única
- Atividade única: por que, quando e como (Conferência de Desenvolvedores Android 2018)
- Android Jetpack: gerenciar a navegação da interface com o Controlador de navegação (Google I/O '18)