Coluna de navegação

Os trilhos fornecem acesso a destinos em apps executados em dispositivos com telas grandes. Use os trilhos de navegação para:

  • Destinos de nível superior que precisam ser acessíveis em qualquer lugar de um app
  • De três a sete destinos principais
  • Layouts para tablet ou computador
Um trilho de navegação vertical no lado esquerdo de uma tela com quatro destinos (Todos os arquivos, Recentes, Fotos e Biblioteca), cada um com um ícone associado e um botão de ação flutuante.
Figura 1. Uma coluna de navegação com quatro destinos e um botão de ação flutuante.

Nesta página, mostramos como mostrar trilhos no app com telas relacionadas e navegação básica.

Superfície da API

Use o elemento combinável NavigationRail com NavigationRailItem para implementar um trilho no seu aplicativo. O NavigationRailItem representa um único item de trilho na coluna de trilho.

O NavigationRailItem inclui os seguintes parâmetros principais:

  • selected: determina se o item de trilho atual está visualmente destacado.
  • onClick(): uma função lambda obrigatória que define a ação a ser realizada quando o usuário clica no item do trilho. É aqui que você normalmente processa eventos de navegação, atualiza o estado do item de trilho selecionado ou carrega o conteúdo correspondente.
  • label: exibe o texto no item do trilho. Opcional.
  • icon: mostra um ícone no item do trilho. Opcional.

Exemplo: navegação baseada em trilhos

O snippet a seguir implementa uma coluna de navegação para que os usuários possam navegar entre telas diferentes em um app:

@Composable
fun NavigationRailExample(modifier: Modifier = Modifier) {
    val navController = rememberNavController()
    val startDestination = Destination.SONGS
    var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }

    Scaffold(modifier = modifier) { contentPadding ->
        NavigationRail(modifier = Modifier.padding(contentPadding)) {
            Destination.entries.forEachIndexed { index, destination ->
                NavigationRailItem(
                    selected = selectedDestination == index,
                    onClick = {
                        navController.navigate(route = destination.route)
                        selectedDestination = index
                    },
                    icon = {
                        Icon(
                            destination.icon,
                            contentDescription = destination.contentDescription
                        )
                    },
                    label = { Text(destination.label) }
                )
            }
        }
        AppNavHost(navController, startDestination)
    }
}

Pontos principais

  • NavigationRail exibe uma coluna vertical de itens de trilho, com cada item correspondendo a um Destination.
  • val navController = rememberNavController() cria e lembra de uma instância de NavHostController, que gerencia a navegação em um NavHost.
  • var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } gerencia o estado do item de trem selecionado no momento.
    • startDestination.ordinal recebe o índice numérico (posição) da entrada de tipo enumerado Destination.SONGS.
  • Quando um item do trilho é clicado, navController.navigate(route = destination.route) é chamado para navegar até a tela correspondente.
  • A lambda onClick do NavigationRailItem atualiza o estado selectedDestination para destacar visualmente o item do trilho clicado.
  • Ele chama o elemento combinável AppNavHost, transmitindo o navController e startDestination, para mostrar o conteúdo real da tela selecionada.

Resultado

A imagem a seguir mostra o resultado do snippet anterior:

Uma coluna de navegação vertical com três destinos e ícones associados: "Songs", "Album" e "Playlist". Os ícones indicam visualmente a finalidade de cada botão de navegação na barra. Cada destino tem um ícone relevante associado a ele (por exemplo, uma nota musical para
Figura 2. Uma coluna de navegação com três destinos e ícones associados: "Songs", "Album" e "Playlist".

Outros recursos