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 dell'app in alto. Mostrano le destinazioni dei contenuti principali 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 la gerarchia. Sono necessarie quando una schermata richiede più di un livello di schede.
Questa pagina mostra come visualizzare le schede principali nella tua app con schermate correlate e navigazione di base.
Piattaforma API
Utilizza i composable Tab, PrimaryTabRow e SecondaryTabRow
per implementare le schede. Il composable Tab rappresenta una singola scheda all'interno della
riga e viene in genere utilizzato all'interno di un PrimaryTabRow (per le schede indicatore
principali) o SecondaryTabRow (per le schede indicatore secondarie).
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 impostata 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 in alto con schede per spostarsi tra le diverse schermate di un'app:
@Composable fun NavigationTabExample(modifier: Modifier = Modifier) { val navController = rememberNavController() val startDestination = Destination.SONGS var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } Scaffold(modifier = modifier) { contentPadding -> PrimaryTabRow(selectedTabIndex = selectedDestination, modifier = Modifier.padding(contentPadding)) { Destination.entries.forEachIndexed { index, destination -> Tab( selected = selectedDestination == index, onClick = { navController.navigate(route = destination.route) selectedDestination = index }, text = { Text( text = destination.label, maxLines = 2, overflow = TextOverflow.Ellipsis ) } ) } } AppNavHost(navController, startDestination) } }
Punti chiave
PrimaryTabRowmostra una riga orizzontale di schede, ognuna delle quali corrisponde a unaDestination.val navController = rememberNavController()crea e memorizza un' istanza diNavHostController, che gestisce la navigazione all'interno di un'NavHost.var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }gestisce lo stato della scheda selezionata.startDestination.ordinalrecupera l'indice numerico (posizione) della voce enumDestination.SONGS.
- Quando fai clic su una scheda, la lambda
onClickchiamanavController.navigate(route = destination.route)per passare alla schermata corrispondente. - La lambda
onClickdiTabaggiorna lo statoselectedDestinationper evidenziare visivamente la scheda su cui hai fatto clic. - Chiama il composable
AppNavHost, passandonavControllerestartDestination, per visualizzare i contenuti effettivi della schermata selezionata.
Risultato
L'immagine seguente mostra il risultato dello snippet precedente:
.png?authuser=9&hl=it)