Use um botão segmentado para que os usuários escolham entre um conjunto de opções lado a lado. Há dois tipos de botões segmentados:
- Botão de seleção única: permite que os usuários escolham uma opção.
- Botão de seleção múltipla: permite que os usuários escolham entre dois e cinco itens. Para escolhas mais complexas ou mais de cinco itens, use fichas.
Superfície da API
Use os layouts SingleChoiceSegmentedButtonRow
e
MultiChoiceSegmentedButtonRow
para criar botões segmentados. Esses
layouts garantem que as SegmentedButton
s sejam posicionadas e dimensionadas corretamente
e compartilham os seguintes parâmetros principais:
space
: ajusta a sobreposição entre os botões.content
: contém o conteúdo da linha de botão segmentada, que geralmente é uma sequência deSegmentedButton
s.
Criar um botão segmentado de seleção única
Este exemplo mostra como criar um botão segmentado de seleção única:
@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) } ) } } }
Pontos principais sobre o código
- Inicializa uma variável
selectedIndex
usandoremember
emutableIntStateOf
para rastrear o índice de botão selecionado no momento. - Define uma lista de
options
que representam os rótulos dos botões. SingleChoiceSegmentedButtonRow
garante que apenas um botão possa ser selecionado.- Cria um
SegmentedButton
para cada opção dentro do loopforEachIndexed
:shape
define a forma do botão com base no índice e na contagem total de opções usandoSegmentedButtonDefaults.itemShape
.onClick
atualizaselectedIndex
com o índice do botão clicado.selected
define o estado de seleção do botão com base emselectedIndex
.label
exibe o rótulo do botão usando o elemento combinávelText
.
Resultado
Criar um botão segmentado de seleção múltipla
Este exemplo mostra como criar um botão segmentado de múltiplas escolhas com ícones que permite que os usuários selecionem várias opções:
@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" ) } } ) } } }
Pontos principais sobre o código
- O código inicializa a variável
selectedOptions
usandoremember
emutableStateListOf
. Isso rastreia o estado selecionado de cada botão. - O código usa
MultiChoiceSegmentedButtonRow
para conter os botões. - Dentro do loop
forEachIndexed
, o código cria umSegmentedButton
para cada opção:shape
define a forma do botão com base no índice e na contagem total de opções.checked
define o estado de verificação do botão com base no valor correspondente emselectedOptions
.onCheckedChange
alterna o estado selecionado do item correspondente emselectedOptions
quando o botão é clicado.icon
exibe um ícone com base emSegmentedButtonDefaults.Icon
e no estado de verificação do botão.label
exibe um ícone correspondente ao rótulo, usando elementos combináveisIcon
com vetores de imagem e descrições de conteúdo apropriados.
Resultado
Outros recursos
- Material 3: Botões segmentados