Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Le schede ti consentono di organizzare gruppi di contenuti correlati. Esistono due tipi di
schede:
Schede principali: posizionate nella parte superiore del riquadro dei contenuti sotto una barra superiore dell'app.
Mostrano le principali destinazioni dei contenuti e devono essere utilizzate quando è necessario un solo
set di schede.
Schede secondarie: utilizzate all'interno di un'area di contenuti per separare ulteriormente i contenuti correlati e stabilire una gerarchia. Sono necessari quando una schermata richiede
più di un livello di schede.
Figura 1. Schede principali (1) e secondarie (2).
Questa pagina mostra come visualizzare le schede principali nella tua app con schermate correlate e
navigazione di base.
Superficie API
Utilizza i composable Tab, PrimaryTabRow e SecondaryTabRow
per implementare le schede. Il componente componibile Tab rappresenta una singola scheda all'interno della riga e viene in genere utilizzato all'interno di un PrimaryTabRow (per le schede degli indicatori principali) o di un SecondaryTabRow (per le schede degli indicatori secondari).
Tab include i seguenti parametri chiave:
selected: determina se la scheda corrente è evidenziata visivamente.
onClick(): una funzione lambda obbligatoria che definisce l'azione da
eseguire quando l'utente fa clic sulla scheda. In genere qui gestisci
gli eventi di navigazione, aggiorni lo stato della scheda selezionata o carichi i contenuti
corrispondenti.
text: mostra il testo all'interno della scheda. Facoltativo.
icon: mostra un'icona all'interno della scheda. Facoltativo.
enabled: controlla se la scheda è abilitata e se è possibile interagire con essa. Se
è impostato su false, la scheda viene visualizzata in stato disattivato e non risponde ai
clic.
Esempio: navigazione basata su schede
Il seguente snippet implementa una barra di navigazione superiore con schede per spostarsi
tra le diverse schermate di un'app:
PrimaryTabRow mostra una riga orizzontale di schede, ognuna delle quali corrisponde
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 della
scheda selezionata.
startDestination.ordinal restituisce l'indice numerico (posizione) della voce di enumerazione Destination.SONGS.
Quando fai clic su una scheda, le chiamate lambda onClicknavController.navigate(route = destination.route) ti reindirizzano alla
schermata corrispondente.
La lambda onClick di Tab aggiorna lo stato di selectedDestination per
evidenziare visivamente la scheda selezionata.
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. Tre schede (Brani, Album e Playlist) disposte orizzontalmente.
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,["Tabs allow you to organize groups of related content. There are two types of\ntabs:\n\n- **Primary tabs**: Placed at the top of the content pane under a top app bar. They display the main content destinations, and should be used when just one set of tabs are needed.\n- **Secondary tabs**: Used within a content area to further separate related content and establish hierarchy. They are necessary when a screen requires more than one level of tabs.\n\n**Figure 1.** Primary tabs (1) and secondary tabs (2).\n\nThis page shows how to display primary tabs in your app with related screens and\nbasic navigation.\n\nAPI surface\n\nUse the [`Tab`](/reference/kotlin/androidx/compose/material3/package-summary#Tab(kotlin.Boolean,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Function0,kotlin.Function0,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,androidx.compose.foundation.interaction.MutableInteractionSource)), [`PrimaryTabRow`](/reference/kotlin/androidx/compose/material3/package-summary#PrimaryTabRow(kotlin.Int,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,kotlin.Function1,kotlin.Function0,kotlin.Function0)), and [`SecondaryTabRow`](/reference/kotlin/androidx/compose/material3/package-summary#SecondaryTabRow(kotlin.Int,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.graphics.Color,kotlin.Function1,kotlin.Function0,kotlin.Function0)) composables\nto implement tabs. The `Tab` composable represents an individual tab within the\nrow, and is typically used inside of a `PrimaryTabRow` (for primary indicator\ntabs) or `SecondaryTabRow` (for secondary indicator tabs).\n\n`Tab` includes the following key parameters:\n\n- `selected`: Determines whether the current tab is visually highlighted.\n- `onClick()`: A required lambda function that defines the action to be performed when the user clicks on the tab. This is where you typically handle navigation events, update the selected tab state, or load corresponding content.\n- `text`: Displays text within the tab. Optional.\n- `icon`: Displays an icon within the tab. Optional.\n- `enabled`: Controls whether the tab is enabled and can be interacted with. If set to false, the tab appears in a disabled state and won't respond to clicks.\n\nExample: Tab-based navigation\n\nThe following snippet implements a top navigation bar with tabs to navigate\nbetween different 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 NavigationTabExample(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 PrimaryTabRow(selectedTabIndex = selectedDestination, modifier = Modifier.padding(contentPadding)) {\n Destination.entries.forEachIndexed { index, destination -\u003e\n Tab(\n selected = selectedDestination == index,\n onClick = {\n navController.navigate(route = destination.route)\n selectedDestination = index\n },\n text = {\n Text(\n text = destination.label,\n maxLines = 2,\n overflow = TextOverflow.Ellipsis\n )\n }\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#L186-L213\n```\n\n\u003cbr /\u003e\n\nKey points\n\n- `PrimaryTabRow` displays a horizontal row of tabs, with each tab 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 selected tab.\n - `startDestination.ordinal` gets the numerical index (position) of the `Destination.SONGS` enum entry.\n- When you click a tab, the `onClick` lambda calls `navController.navigate(route = destination.route)` to navigate to the corresponding screen.\n- The `onClick` lambda of the `Tab` updates the `selectedDestination` state to visually highlight the clicked tab.\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.** 3 tabs--- Songs, Album, and Playlist--- arranged horizontally.\n\nAdditional resources\n\n- [Material 3 - Tabs](https://m3.material.io/components/tabs/guidelines)\n- [Navigation with Compose](/develop/ui/compose/navigation)"]]