Используйте сегментированную кнопку, чтобы позволить пользователям выбирать из набора вариантов, расположенных рядом. Существует два типа сегментированных кнопок:
- Кнопка одиночного выбора : позволяет пользователям выбрать один вариант.
- Кнопка множественного выбора : позволяет пользователям выбирать от двух до пяти элементов. Для более сложного выбора или выбора более пяти элементов используйте фишки .

API поверхность
Используйте макеты SingleChoiceSegmentedButtonRow
и MultiChoiceSegmentedButtonRow
для создания сегментированных кнопок. Эти макеты гарантируют, что SegmentedButton
s будут правильно позиционированы и рассчитаны по размеру, и разделяют следующие ключевые параметры:
-
space
: регулирует перекрытие между кнопками. -
content
: Содержит содержимое строки сегментированных кнопок, которая обычно представляет собой последовательностьSegmentedButton
.
Создать сегментированную кнопку с одним выбором
В этом примере показано, как создать сегментированную кнопку с одним выбором:
@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) } ) } } }
Ключевые моменты кодекса
- Инициализирует переменную
selectedIndex
с помощьюremember
иmutableIntStateOf
для отслеживания выбранного индекса кнопки. - Определяет список
options
, представляющих метки кнопок. -
SingleChoiceSegmentedButtonRow
гарантирует, что можно выбрать только одну кнопку. - Создает
SegmentedButton
для каждой опции внутри циклаforEachIndexed
:-
shape
определяет форму кнопки на основе ее индекса и общего количества вариантов с помощьюSegmentedButtonDefaults.itemShape
. -
onClick
обновляетselectedIndex
индексом нажатой кнопки. -
selected
устанавливает состояние выбора кнопки на основеselectedIndex
. -
label
отображает надпись кнопки с использованиемText
компоновщика.
-
Результат

Создать сегментированную кнопку с множественным выбором
В этом примере показано, как создать сегментированную кнопку с несколькими вариантами выбора и значками, которая позволяет пользователям выбирать несколько вариантов:
@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" ) } } ) } } }
Ключевые моменты кодекса
- Код инициализирует переменную
selectedOptions
с помощьюremember
иmutableStateListOf
. Это отслеживает выбранное состояние каждой кнопки. - Код использует
MultiChoiceSegmentedButtonRow
для размещения кнопок. - Внутри цикла
forEachIndexed
код создаетSegmentedButton
для каждой опции:-
shape
определяет форму кнопки на основе ее индекса и общего количества вариантов. -
checked
устанавливает отмеченное состояние кнопки на основе соответствующего значения вselectedOptions
. -
onCheckedChange
переключает выбранное состояние соответствующего элемента вselectedOptions
при нажатии кнопки. -
icon
отображает значок на основеSegmentedButtonDefaults.Icon
и отмеченного состояния кнопки. -
label
отображает значок, соответствующий метке, с использованием компонуемыхIcon
с соответствующими векторами изображений и описаниями содержимого.
-
Результат

Дополнительные ресурсы
- Материал 3: Сегментированные кнопки