Utilizza un pulsante segmentato per consentire agli utenti di scegliere tra un insieme di opzioni affiancate. Esistono due tipi di pulsanti segmentati:
- Pulsante di selezione singola: consente agli utenti di scegliere un'opzione.
- Pulsante di selezione multipla: consente agli utenti di scegliere tra due e cinque elementi. Per scelte più complesse o più di cinque elementi, utilizza i chip.
Piattaforma API
Utilizza i layout SingleChoiceSegmentedButtonRow e
MultiChoiceSegmentedButtonRow per creare pulsanti segmentati. Questi
layout posizionano e dimensionano correttamente i SegmentedButton
e condividono i seguenti parametri chiave:
space: regola la sovrapposizione tra i pulsanti.content: contiene il contenuto della riga di pulsanti segmentati, che in genere è una sequenza diSegmentedButton.
Creare un pulsante segmentato a selezione singola
Questo esempio mostra come creare un pulsante segmentato a selezione singola:
@Composable fun SingleChoiceSegmentedButton(modifier: Modifier = Modifier) { var selectedIndex by remember { mutableIntStateOf(0) } val options = listOf("Day", "Month", "Week") SingleChoiceSegmentedButtonRow { options.forEachIndexed { index, label -> SegmentedButton( shape = SegmentedButtonDefaults.itemShape( index = index, count = options.size ), onClick = { selectedIndex = index }, selected = index == selectedIndex, label = { Text(label) } ) } } }
Punti chiave del codice
- Inizializza una variabile
selectedIndexutilizzandorememberemutableIntStateOfper monitorare l'indice del pulsante selezionato. - Definisce un elenco di
optionsche rappresentano le etichette dei pulsanti. SingleChoiceSegmentedButtonRowti consente di selezionare un solo pulsante.- Crea un
SegmentedButtonper ogni opzione all'interno del cicloforEachIndexed:shapedefinisce la forma del pulsante in base al suo indice e al conteggio totale delle opzioni utilizzandoSegmentedButtonDefaults.itemShape.onClickupdatesselectedIndexwith the clicked button's index.selectedimposta lo stato di selezione del pulsante in base aselectedIndex.labelmostra l'etichetta del pulsante utilizzando il componibileText.
Risultato
Creare un pulsante segmentato a selezione multipla
Questo esempio mostra come creare un pulsante segmentato a scelta multipla con icone che consente agli utenti di selezionare più opzioni:
@Composable fun MultiChoiceSegmentedButton(modifier: Modifier = Modifier) { val selectedOptions = remember { mutableStateListOf(false, false, false) } val options = listOf("Walk", "Ride", "Drive") MultiChoiceSegmentedButtonRow { options.forEachIndexed { index, label -> SegmentedButton( shape = SegmentedButtonDefaults.itemShape( index = index, count = options.size ), checked = selectedOptions[index], onCheckedChange = { selectedOptions[index] = !selectedOptions[index] }, icon = { SegmentedButtonDefaults.Icon(selectedOptions[index]) }, label = { when (label) { "Walk" -> Icon( imageVector = Icons.AutoMirrored.Filled.DirectionsWalk, contentDescription = "Directions Walk" ) "Ride" -> Icon( imageVector = Icons.Default.DirectionsBus, contentDescription = "Directions Bus" ) "Drive" -> Icon( imageVector = Icons.Default.DirectionsCar, contentDescription = "Directions Car" ) } } ) } } }
Punti chiave del codice
- Il codice inizializza la variabile
selectedOptionsutilizzandorememberemutableStateListOf. Questo monitora lo stato selezionato di ogni pulsante. - Il codice utilizza
MultiChoiceSegmentedButtonRowper contenere i pulsanti. - All'interno del ciclo
forEachIndexed, il codice crea unSegmentedButtonper ogni opzione:shapedefinisce la forma del pulsante in base al suo indice e al numero totale di opzioni.checkedimposta lo stato di selezione del pulsante in base al valore corrispondente inselectedOptions.onCheckedChangeattiva/disattiva lo stato selezionato dell'elemento corrispondente inselectedOptionsquando viene fatto clic sul pulsante.iconmostra un'icona in base aSegmentedButtonDefaults.Icone allo stato di selezione del pulsante.labelmostra un'icona corrispondente all'etichetta, utilizzando i componibiliIconcon vettori di immagini e descrizioni dei contenuti appropriati.
Risultato
Risorse aggiuntive
- Material 3: pulsanti segmentati