Mit einer segmentierten Schaltfläche können Nutzer aus einer Reihe von Optionen nebeneinander auswählen. Es gibt zwei Arten von segmentierten Schaltflächen:
- Button für Einzelauswahl: Nutzer können eine Option auswählen.
- Button für Mehrfachauswahl: Nutzer können zwischen zwei und fünf Elementen auswählen. Für komplexere Auswahlmöglichkeiten oder mehr als fünf Elemente sollten Sie Chips verwenden.
API-Oberfläche
Verwenden Sie die Layouts SingleChoiceSegmentedButtonRow und MultiChoiceSegmentedButtonRow, um segmentierte Schaltflächen zu erstellen. Diese Layouts positionieren und dimensionieren SegmentedButtons korrekt und haben die folgenden Schlüsselparameter gemeinsam:
space: Passt die Überlappung zwischen den Buttons an.content: Enthält den Inhalt der segmentierten Schaltflächenzeile, die in der Regel eine Sequenz vonSegmentedButtons ist.
Segmentierte Schaltfläche mit Einzelauswahl erstellen
In diesem Beispiel wird gezeigt, wie Sie eine segmentierte Schaltfläche mit Einzelauswahl erstellen:
@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) } ) } } }
Wichtige Punkte zum Code
- Initialisiert eine
selectedIndex-Variable mitrememberundmutableIntStateOf, um den Index der ausgewählten Schaltfläche zu verfolgen. - Definiert eine Liste von
options, die die Schaltflächenlabels darstellen. - Mit
SingleChoiceSegmentedButtonRowkönnen Sie nur eine Schaltfläche auswählen. - Erstellt in der
forEachIndexed-Schleife für jede Option einSegmentedButton:shapedefiniert die Form des Buttons anhand seines Index und der Gesamtzahl der Optionen mitSegmentedButtonDefaults.itemShape.onClickaktualisiertselectedIndexmit dem Index des angeklickten Buttons.selectedlegt den Auswahlstatus des Buttons basierend aufselectedIndexfest.labelzeigt das Buttonlabel mit der zusammensetzbaren FunktionTextan.
Ergebnis
Segmentierte Schaltfläche mit Mehrfachauswahl erstellen
In diesem Beispiel wird gezeigt, wie Sie eine segmentierte Schaltfläche mit mehreren Auswahlmöglichkeiten und Symbolen erstellen, mit der Nutzer mehrere Optionen auswählen können:
@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" ) } } ) } } }
Wichtige Punkte zum Code
- Der Code initialisiert die Variable
selectedOptionsmitrememberundmutableStateListOf. Damit wird der ausgewählte Status der einzelnen Schaltflächen erfasst. - Im Code wird
MultiChoiceSegmentedButtonRowverwendet, um die Buttons zu enthalten. - In der
forEachIndexed-Schleife erstellt der Code für jede Option einSegmentedButton:shapedefiniert die Form des Buttons basierend auf seinem Index und der Gesamtzahl der Optionen.checkedlegt den Status des Buttons basierend auf dem entsprechenden Wert inselectedOptionsfest.onCheckedChangeschaltet den ausgewählten Status des entsprechenden Elements inselectedOptionsum, wenn auf den Button geklickt wird.iconzeigt ein Symbol basierend aufSegmentedButtonDefaults.Iconund dem Status des Buttons an.labelzeigt ein Symbol an, das dem Label entspricht. Dazu werdenIcon-Kompositionen mit entsprechenden Bildvektoren und Inhaltsbeschreibungen verwendet.
Ergebnis
Zusätzliche Ressourcen
- Material 3: Segmentierte Schaltflächen