Użyj przycisku segmentowanego, aby umożliwić użytkownikom wybór spośród zestawu opcji wyświetlanych obok siebie. Istnieją 2 rodzaje przycisków segmentowanych:
- Przycisk wyboru pojedynczego: pozwala użytkownikom wybrać jedną opcję.
- Przycisk wyboru wielokrotnego: umożliwia użytkownikom wybór od 2 do 5 elementów. W przypadku bardziej złożonych wyborów lub więcej niż 5 elementów użyj elementów typu chip.
Interfejs API
Do tworzenia przycisków segmentowanych używaj układów SingleChoiceSegmentedButtonRow i MultiChoiceSegmentedButtonRow. Te układy prawidłowo pozycjonują i rozmieszczają SegmentedButton oraz mają te kluczowe parametry:
space: dostosowuje nakładanie się przycisków.content: zawiera treść wiersza przycisku segmentowanego, który zwykle jest sekwencją elementówSegmentedButton.
Tworzenie przycisku segmentowanego z możliwością wyboru jednej opcji
Ten przykład pokazuje, jak utworzyć przycisk segmentowany z możliwością wyboru jednej opcji:
@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) } ) } } }
Najważniejsze informacje o kodzie
- Inicjuje zmienną
selectedIndexza pomocąrememberimutableIntStateOf, aby śledzić indeks wybranego przycisku. - Definiuje listę
optionsreprezentujących etykiety przycisków. SingleChoiceSegmentedButtonRowpozwala wybrać tylko jeden przycisk.- Tworzy element
SegmentedButtondla każdej opcji w pętliforEachIndexed:shapedefiniuje kształt przycisku na podstawie jego indeksu i łącznej liczby opcji przy użyciuSegmentedButtonDefaults.itemShape.onClickaktualizujeselectedIndexza pomocą indeksu klikniętego przycisku.selectedustawia stan wyboru przycisku na podstawieselectedIndex.labelwyświetla etykietę przycisku za pomocą funkcji kompozycyjnejText.
Wynik
Tworzenie przycisku segmentowanego z wieloma opcjami wyboru
Ten przykład pokazuje, jak utworzyć przycisk segmentowany z wieloma opcjami i ikonami, który umożliwia użytkownikom wybór kilku opcji:
@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" ) } } ) } } }
Najważniejsze informacje o kodzie
- Kod inicjuje zmienną
selectedOptionsza pomocąrememberimutableStateListOf. Śledzi stan zaznaczenia każdego przycisku. - Kod używa elementu
MultiChoiceSegmentedButtonRowdo przechowywania przycisków. - Wewnątrz pętli
forEachIndexedkod tworzy elementSegmentedButtondla każdej opcji:shapedefiniuje kształt przycisku na podstawie jego indeksu i łącznej liczby opcji.checkedustawia stan zaznaczenia przycisku na podstawie odpowiedniej wartości wselectedOptions.onCheckedChangeprzełącza stan zaznaczenia odpowiedniego elementu wselectedOptionspo kliknięciu przycisku.iconwyświetla ikonę na podstawieSegmentedButtonDefaults.Iconi stanu zaznaczenia przycisku.labelwyświetla ikonę odpowiadającą etykiecie, używając funkcji kompozycyjnychIconz odpowiednimi wektorami obrazów i opisami treści.
Wynik
Dodatkowe materiały
- Material 3: przyciski segmentowe