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