Un botón de selección permite que un usuario seleccione una opción de un conjunto de opciones. Se usa un botón de selección cuando solo se puede seleccionar un elemento de una lista. Si los usuarios necesitan seleccionar más de un elemento, usa un interruptor.
Plataforma de la API
Usa el elemento componible RadioButton
para enumerar las opciones disponibles. Une cada opción RadioButton
y su etiqueta dentro de un componente Row
para agruparlas.
RadioButton
incluye los siguientes parámetros clave:
selected
: Indica si el botón de selección está seleccionado.onClick
: Es una función lambda que se ejecuta cuando se hace clic en el botón de selección. Si esnull
, el usuario no puede interactuar directamente con el botón de selección.enabled
: Controla si el botón de selección está habilitado o inhabilitado. Los usuarios no pueden interactuar con los botones de selección inhabilitados.interactionSource
: Te permite observar el estado de interacción del botón, por ejemplo, si se presiona, se coloca el cursor sobre él o se enfoca.
Crea un botón de selección básico
El siguiente fragmento de código muestra una lista de botones de selección dentro de un Column
:
@Composable fun RadioButtonSingleSelection(modifier: Modifier = Modifier) { val radioOptions = listOf("Calls", "Missed", "Friends") val (selectedOption, onOptionSelected) = remember { mutableStateOf(radioOptions[0]) } // Note that Modifier.selectableGroup() is essential to ensure correct accessibility behavior Column(modifier.selectableGroup()) { radioOptions.forEach { text -> Row( Modifier .fillMaxWidth() .height(56.dp) .selectable( selected = (text == selectedOption), onClick = { onOptionSelected(text) }, role = Role.RadioButton ) .padding(horizontal = 16.dp), verticalAlignment = Alignment.CenterVertically ) { RadioButton( selected = (text == selectedOption), onClick = null // null recommended for accessibility with screen readers ) Text( text = text, style = MaterialTheme.typography.bodyLarge, modifier = Modifier.padding(start = 16.dp) ) } } } }
Puntos clave sobre el código
radioOptions
representa las etiquetas de los botones de selección.- La función de componibilidad
remember
crea una variable de estadoselectedOption
y una función para actualizar ese estado llamadaonOptionSelected
. Este estado contiene la opción de botón de selección que se seleccionó actualmente.mutableStateOf(radioOptions[0])
inicializa el estado en el primer elemento de la lista. "Llamadas" es el primer elemento, por lo que es el botón de selección que se selecciona de forma predeterminada.
Modifier.selectableGroup()
garantiza un comportamiento de accesibilidad adecuado para los lectores de pantalla. Le informa al sistema que los elementos dentro de esteColumn
forman parte de un grupo seleccionable, lo que permite una compatibilidad adecuada con el lector de pantalla.Modifier.selectable()
hace que todoRow
actúe como un solo elemento selectable.selected
indica si se selecciona elRow
actual según el estadoselectedOption
.- La función lambda
onClick
actualiza el estadoselectedOption
a la opción en la que se hizo clic cuando se hace clic enRow
. role = Role.RadioButton
informa a los servicios de accesibilidad queRow
funciona como un botón de selección.
RadioButton(...)
crea el elementoRadioButton
componible.onClick = null
enRadioButton
mejora la accesibilidad. Esto evita que el botón de selección controle el evento de clic directamente y permite que el modificadorselectable
deRow
administre el estado de selección y el comportamiento de accesibilidad.
Resultado
Recursos adicionales
- Material Design: Botones