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

Поверхность API
Используйте макеты SingleChoiceSegmentedButtonRow и MultiChoiceSegmentedButtonRow для создания сегментированных кнопок. Эти макеты правильно позиционируют и изменяют размер SegmentedButton кнопок и имеют следующие общие ключевые параметры:
-
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: Сегментированные пуговицы