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 SegmentedButtons 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 de- SegmentedButtons.
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 selectedIndexconrememberymutableIntStateOfpara hacer un seguimiento del índice del botón seleccionado.
- Define una lista de optionsque representan las etiquetas de los botones.
- SingleChoiceSegmentedButtonRowte permite seleccionar solo un botón.
- Crea un SegmentedButtonpara cada opción, dentro del bucleforEachIndexed:- shapedefine la forma del botón según su índice y el recuento total de opciones con- SegmentedButtonDefaults.itemShape.
- onClickactualiza- selectedIndexcon el índice del botón en el que se hizo clic.
- selectedestablece el estado de selección del botón según- selectedIndex.
- labelmuestra la etiqueta del botón con el elemento- Textcomponible.
 
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 selectedOptionsconrememberymutableStateListOf. Esto hace un seguimiento del estado seleccionado de cada botón.
- El código usa MultiChoiceSegmentedButtonRowpara contener los botones.
- Dentro del bucle forEachIndexed, el código crea un objetoSegmentedButtonpara cada opción:- shapedefine la forma del botón según su índice y el recuento total de opciones.
- checkedestablece el estado de activación del botón según el valor correspondiente en- selectedOptions.
- onCheckedChangealterna el estado seleccionado del elemento correspondiente en- selectedOptionscuando se hace clic en el botón.
- iconmuestra un ícono basado en- SegmentedButtonDefaults.Icony el estado de activación del botón.
- labelmuestra un ícono correspondiente a la etiqueta, con elementos componibles- Iconcon vectores de imagen y descripciones de contenido adecuados.
 
Resultado
 
  Recursos adicionales
- Material 3: Botones segmentados
