Użyj przycisku podzielonego, aby umożliwić użytkownikom wybór spośród zestawu opcji umieszczonych obok siebie. Istnieją 2 rodzaje przycisków segmentowanych:
- Przycisk wyboru pojedynczego: pozwala użytkownikom wybrać jedną opcję.
- Przycisk wyboru wielu elementów: pozwala użytkownikom wybrać od 2 do 5 elementów. W przypadku bardziej złożonych opcji lub większej liczby elementów użyj elementów.
Interfejs API
Aby utworzyć przyciski podzielone na segmenty, użyj układów SingleChoiceSegmentedButtonRow
i MultiChoiceSegmentedButtonRow
. Te układy zapewniają prawidłowe rozmieszczenie i rozmiar SegmentedButton
oraz mają te kluczowe parametry:
space
: dostosowuje nakładanie się przycisków.content
: zawiera zawartość wiersza przycisku podzielonego na segmenty, która jest zwykle sekwencją elementówSegmentedButton
.
Tworzenie przycisku segmentowanego z jednym polem wyboru
Ten przykład pokazuje, jak utworzyć przycisk z segmentem umożliwiającym wybór pojedynczy:
@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
- Inicjowanie zmiennej
selectedIndex
za pomocą zmiennychremember
imutableIntStateOf
w celu śledzenia aktualnie wybranego indeksu przycisku. - Określa listę
options
reprezentujących etykiety przycisków. SingleChoiceSegmentedButtonRow
gwarantuje, że można wybrać tylko 1 przycisk.- W pętli
forEachIndexed
tworzySegmentedButton
dla każdej opcji:shape
definiuje kształt przycisku na podstawie jego indeksu i łącznej liczby opcji za pomocąSegmentedButtonDefaults.itemShape
.onClick
aktualizujeselectedIndex
z indeksem klikniętego przycisku.selected
ustawia stan wyboru przycisku na podstawieselectedIndex
.label
wyświetla etykietę przycisku za pomocą elementu kompozycyjnegoText
.
Wynik
Tworzenie przycisku z segmentami umożliwiającymi wielokrotny wybór
Ten przykład pokazuje, jak utworzyć podzielony przycisk z ikonami, który umożliwia użytkownikom wybranie 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 inicjalizuje zmienną
selectedOptions
za pomocą zmiennychremember
imutableStateListOf
. śledzi wybrany stan każdego przycisku. - Kod używa elementu
MultiChoiceSegmentedButtonRow
do umieszczania przycisków. - Wewnątrz pętli
forEachIndexed
kod tworzySegmentedButton
dla każdej opcji:shape
określa kształt przycisku na podstawie jego indeksu i łącznej liczby opcji.checked
ustawia zaznaczony stan przycisku na podstawie odpowiadającej mu wartości wselectedOptions
.onCheckedChange
po kliknięciu przycisku przełącza wybrany stan odpowiedniego elementu w elementachselectedOptions
.icon
wyświetla ikonę na podstawie wartościSegmentedButtonDefaults.Icon
i stanu zaznaczenia przycisku.label
wyświetla ikonę odpowiadającą etykiecie, używając elementów kompozycyjnychIcon
z odpowiednimi wektorami obrazów i opisami treści.
Wynik
Dodatkowe materiały
- Materiał 3. Przyciski segmentowane