Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Le barre forniscono l'accesso alle destinazioni nelle app eseguite su dispositivi con schermi
grandi. Devi utilizzare le barre di navigazione per:
Destinazioni di primo livello che devono essere accessibili ovunque in un'app
Da tre a sette destinazioni principali
Layout per tablet o computer
Figura 1. Una barra di navigazione con quattro destinazioni e un pulsante di azione mobile.
Questa pagina mostra come visualizzare le sezioni nell'app con schermate correlate e
navigazione di base.
Superficie API
Utilizza il composable NavigationRail con NavigationRailItem per
implementare una rotaia nella tua applicazione. NavigationRailItem rappresenta un
singolo elemento della sezione nella colonna della sezione.
NavigationRailItem include i seguenti parametri chiave:
selected: determina se l'elemento della guida corrente è evidenziato visivamente.
onClick(): una funzione lambda obbligatoria che definisce l'azione da
eseguire quando l'utente fa clic sull'elemento della guida. In genere qui
gestisci gli eventi di navigazione, aggiorni lo stato dell'elemento della barra selezionato o carichi
i contenuti corrispondenti.
label: mostra il testo all'interno dell'elemento della guida. Facoltativo.
icon: Mostra un'icona all'interno dell'elemento della guida. Facoltativo.
Esempio: navigazione basata su binari
Il seguente snippet implementa una barra di spostamento in modo che gli utenti possano spostarsi tra
le diverse schermate di un'app:
NavigationRail mostra una colonna verticale di elementi della guida, con ogni elemento
corrispondente a un Destination.
val navController = rememberNavController() crea e memorizza un'istanza di NavHostController, che gestisce la navigazione all'interno di un NavHost.
var selectedDestination by rememberSaveable {
mutableIntStateOf(startDestination.ordinal) } gestisce lo stato dell'elemento della barra
selezionato.
startDestination.ordinal restituisce l'indice numerico (posizione) della voce di enumerazione Destination.SONGS.
Quando si fa clic su un elemento della barra, viene chiamato navController.navigate(route =
destination.route) per passare alla schermata corrispondente.
La lambda onClick di NavigationRailItem aggiorna lo stato di selectedDestination per evidenziare visivamente l'elemento della rotaia su cui è stato fatto clic.
Chiama il composable AppNavHost, passando navController e
startDestination, per visualizzare i contenuti effettivi della schermata selezionata.
Risultato
L'immagine seguente mostra il risultato dello snippet precedente:
Figura 2. Una barra di navigazione contenente tre destinazioni con le icone associate: Brani, Album e Playlist.
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-08-28 UTC.
[null,null,["Ultimo aggiornamento 2025-08-28 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/7a0ebbee11495f628cf9d574f6b6069c2867232a/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)"]]