Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Os Rails oferecem acesso a destinos em apps que são executados em dispositivos com telas
grandes. Use trilhos de navegação para:
Destinos de nível superior que precisam estar acessíveis em qualquer lugar de um app
De três a sete destinos principais
Layouts para tablet ou computador
Figura 1. Uma coluna de navegação com quatro destinos e um botão de ação flutuante.
Nesta página, mostramos como exibir 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 uma barra lateral no seu aplicativo. O NavigationRailItem representa um único item na coluna de trilho.
O NavigationRailItem inclui os seguintes parâmetros principais:
selected: determina se o item do bloco 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 da barra. É aqui que você normalmente
processa eventos de navegação, atualiza o estado do item selecionado da barra ou carrega
o conteúdo correspondente.
label: mostra o texto dentro do item do carrossel. Opcional.
icon: mostra um ícone no item da faixa. 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
diferentes telas em um app:
NavigationRail mostra uma coluna vertical de itens de trilho, com cada item correspondendo a um Destination.
O 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 trilho selecionado no momento.
startDestination.ordinal recebe o índice numérico (posição) da entrada de enumeração Destination.SONGS.
Quando um item da barra é 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 clicado do trilho.
Ele chama o elemento combinável AppNavHost, transmitindo o navController e o
startDestination, para mostrar o conteúdo real da tela selecionada.
Resultado
A imagem a seguir mostra o resultado do snippet anterior:
Figura 2. Uma coluna de navegação com três destinos e ícones associados: "Músicas", "Álbum" e "Playlist".
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-08-25 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-08-25 UTC."],[],[],null,["Rails provide access to destinations in apps that run on devices with large\nscreens. You should use navigation rails for:\n\n- Top-level destinations that need to be accessible anywhere in an app\n- Three to seven main destinations\n- Tablet or desktop layouts\n\n**Figure 1.** A navigation rail with four destinations and a floating action button.\n\nThis page shows you how to display rails in your app with related screens and\nbasic navigation.\n\nAPI surface\n\nUse the [`NavigationRail`](/reference/kotlin/androidx/compose/material3/package-summary#NavigationRail(androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,kotlin.Function1,androidx.compose.foundation.layout.WindowInsets,kotlin.Function1)) composable with [`NavigationRailItem`](/reference/kotlin/androidx/compose/material3/package-summary#NavigationRailItem(kotlin.Boolean,kotlin.Function0,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Function0,kotlin.Boolean,androidx.compose.material3.NavigationRailItemColors,androidx.compose.foundation.interaction.MutableInteractionSource)) to\nimplement a rail in your application. The `NavigationRailItem` represents a\nsingle rail item in the rail column.\n\n`NavigationRailItem` includes the following key parameters:\n\n- `selected`: Determines whether the current rail item is visually highlighted.\n- `onClick()`: A required lambda function that defines the action to be performed when the user clicks on the rail item. This is where you typically handle navigation events, update the selected rail item state, or load corresponding content.\n- `label`: Displays text within the rail item. Optional.\n- `icon`: Displays an icon within the rail item. Optional.\n\nExample: Rail-based navigation\n\nThe following snippet implements a navigation rail so users can navigate between\ndifferent screens in an app:\n| **Note:** The [full source code](https://github.com/android/snippets/blob/main/compose/snippets/src/main/java/com/example/compose/snippets/components/Navigation.kt) includes the code that establishes the basic navigation structure for the following example.\n\n\n```kotlin\n@Composable\nfun NavigationRailExample(modifier: Modifier = Modifier) {\n val navController = rememberNavController()\n val startDestination = Destination.SONGS\n var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }\n\n Scaffold(modifier = modifier) { contentPadding -\u003e\n NavigationRail(modifier = Modifier.padding(contentPadding)) {\n Destination.entries.forEachIndexed { index, destination -\u003e\n NavigationRailItem(\n selected = selectedDestination == index,\n onClick = {\n navController.navigate(route = destination.route)\n selectedDestination = index\n },\n icon = {\n Icon(\n destination.icon,\n contentDescription = destination.contentDescription\n )\n },\n label = { Text(destination.label) }\n )\n }\n }\n AppNavHost(navController, startDestination)\n }\n}https://github.com/android/snippets/blob/5673ffc60b614daf028ee936227128eb8c4f9781/compose/snippets/src/main/java/com/example/compose/snippets/components/Navigation.kt#L153-L180\n```\n\n\u003cbr /\u003e\n\nKey points\n\n- `NavigationRail` displays a vertical column of rail items, with each item corresponding to a `Destination`.\n- `val navController = rememberNavController()` creates and remembers an instance of [`NavHostController`](/reference/androidx/navigation/NavHostController), which manages the navigation within a [`NavHost`](/reference/androidx/navigation/NavHost).\n- `var selectedDestination by rememberSaveable {\n mutableIntStateOf(startDestination.ordinal) }` manages the state of the currently selected rail item.\n - `startDestination.ordinal` gets the numerical index (position) of the `Destination.SONGS` enum entry.\n- When a rail item is clicked, `navController.navigate(route =\n destination.route)` is called to navigate to the corresponding screen.\n- The `onClick` lambda of the `NavigationRailItem` updates the `selectedDestination` state to visually highlight the clicked rail item.\n- It calls the `AppNavHost` composable, passing the `navController` and `startDestination`, to display the actual content of the selected screen.\n\nResult\n\nThe following image shows the result of the previous snippet:\n**Figure 2.** A navigation rail that contains 3 destinations with associated icons: Songs, Album, and Playlist.\n\nAdditional resources\n\n- [Material 3 - Navigation rail](https://m3.material.io/components/navigation-rail/overview)\n- [Navigation with Compose](/develop/ui/compose/navigation)"]]