Usa un botón segmentado para permitir que los usuarios elijan entre un conjunto de opciones, una al lado de la otra. Existen dos tipos de botones segmentados:
- Botón de selección única: Permite que los usuarios elijan una opción.
- Botón de selección múltiple: Permite a los usuarios elegir entre dos y cinco elementos. Para opciones más complejas o más de cinco elementos, usa chips.

Superficie de la API
Usa los diseños SingleChoiceSegmentedButtonRow
y MultiChoiceSegmentedButtonRow
para crear botones segmentados. Estos diseños posicionan y dimensionan los SegmentedButton
s correctamente, y comparten los siguientes parámetros clave:
space
: Ajusta la superposición entre los botones.content
: Contiene el contenido de la fila de botones segmentados, que suele ser una secuencia deSegmentedButton
s.
Cómo crear un botón segmentado de selección única
En este ejemplo, se muestra cómo crear un botón segmentado de selección ú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) } ) } } }
Puntos clave sobre el código
- Inicializa una variable
selectedIndex
conremember
ymutableIntStateOf
para hacer un seguimiento del índice del botón seleccionado. - Define una lista de
options
que representan las etiquetas de los botones. SingleChoiceSegmentedButtonRow
te permite seleccionar solo un botón.- Crea un
SegmentedButton
para cada opción, dentro del bucleforEachIndexed
:shape
define la forma del botón según su índice y el recuento total de opciones conSegmentedButtonDefaults.itemShape
.onClick
actualizaselectedIndex
con el índice del botón en el que se hizo clic.selected
establece el estado de selección del botón segúnselectedIndex
.label
muestra la etiqueta del botón con el elementoText
componible.
Resultado

Crea un botón segmentado de selección múltiple
En este ejemplo, se muestra cómo crear un botón segmentado de opción múltiple con íconos que permite a los usuarios seleccionar varias opciones:
@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" ) } } ) } } }
Puntos clave sobre el código
- El código inicializa la variable
selectedOptions
conremember
ymutableStateListOf
. Esto hace un seguimiento del estado seleccionado de cada botón. - El código usa
MultiChoiceSegmentedButtonRow
para contener los botones. - Dentro del bucle
forEachIndexed
, el código crea un objetoSegmentedButton
para cada opción:shape
define la forma del botón según su índice y el recuento total de opciones.checked
establece el estado de activación del botón según el valor correspondiente enselectedOptions
.onCheckedChange
alterna el estado seleccionado del elemento correspondiente enselectedOptions
cuando se hace clic en el botón.icon
muestra un ícono basado enSegmentedButtonDefaults.Icon
y el estado de activación del botón.label
muestra un ícono correspondiente a la etiqueta, usando elementos componiblesIcon
con vectores de imagen y descripciones de contenido adecuados.
Resultado

Recursos adicionales
- Material 3: Botones segmentados