En este tutorial se explica cómo puedes usar un Checkbox en Android Studio. Explicamos cómo ponerlo en tu interfaz de usuario (UI), como saber cuándo se presiona y como saber si está marcado o no.
Resumen.
Como es de costumbre, primero te daremos un resumen por si tienes apuro y quieres una respuesta rápida. Te explicaremos más a fondo después del resumen.
Primero creamos el Checkbox en nuestra UI y lo acomodamos.
Luego agregamos el comando onClick en el código de XML. Puede agregarse ser desde la actividad también, pero en este caso lo hacemos desde XML.
android:onClick="checkBoxClic"
Después, el método que pusimos en onClick, lo agregamos a nuestra actividad. Ese es el método se llamará cuando demos clic al CheckBox.
En seguida, dentro de ese método declaramos dos variables: una variable tipo CheckBox y una variable booleana.
- La variable CheckBox la relacionamos con la vista, que es el CheckBox presionado.
- El valor de la variable booleana indicará si el CheckBox está marcado o no. Y eso lo sabemos con el comando isChecked de nuestra variable tipo CheckBox.
public void checkBoxClic(View v){ CheckBox modoNocturno = ((CheckBox)v); Boolean activado = modoNocturno.isChecked(); }
Si llamamos el mismo método desde varios CheckBox distintos en Android, podemos usar la función Switch() en java o When() en Kotlin para saber cuál es el que se está presionando. Ve al final de este artículo, ahí te mostramos un ejemplo.
Agregando el Checkbox a la UI en Android.
Será un Checkbox para indicar si el usuario quiere usar modo nocturno en nuestra App.
En el archivo XML de nuestra Actividad, estando en el modo Design, solo hacemos lo siguiente:
- Primero buscamos el Checkbox.
- Luego lo arrastramos a nuestra UI.
- Después cambiamos el texto (“Modo Nocturno”) y le damos una ID (id=“modoNocturno”).
- Por último lo acomodamos donde queramos.
Nuestro Checkbox se ve así:
Estamos usando constraint layout.
En el siguiente paso te mostraremos el código del Checkbox.
Agregando evento onClick() al Checkbox.
Podemos agregar el evento onClick desde el archivo XML. O bien en el código de nuestra actividad. En este caso lo haremos desde el archivo XML.
Para esto solo es cuestión de agregar la línea de código marcada con negritas en el siguiente código al Checkbox.
<CheckBox android:id="@+id/modoNocturno" android:onClick="checkBoxClic" android:text="Modo Nocturno" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="96dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.498" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
La línea onClick, nos indica a que método de la actividad llamará el Checkbox, cuando el usuario lo presione.
En este caso llamaos al método checkBoxClic().
Como este método aún no lo creamos, nos aparecerá un error. Pero nos da la opción de crear este método en nuestra actividad.Como se ve en la siguiente imagen.
En caso de que Android no lo implemente automáticamente, puedes crear el método tu mismo. Solo recuerda poner View como un parámetro de entrada al método. En Java es así:
public void checkBoxClic(View v){ }
Una vez que lo creamos, ya tenemos el método en nuestra actividad listo para saber cuándo el usuario presiona el Checkbox y realizar cualquier acción que deseemos.
Saber si el Checkbox está marcado o no.
Para saber si nuestro Checkbox está marcado o no lo está. Simplemente usamos el comando isChecked del Checkbox.
Sin embargo, como estamos llamando al método directamente de la Interfaz de usuario. No tenemos un variable tipo Checkbox así que tendremos que declararla
- Primero debemos declarar una variable tipo Checkbox.
- Luego asociarla al Checkbox en XML.
- Y ahora si podremos usar el comando isChecked.
NOTA: Si el evento onClick lo manejamos desde el código de la actividad, solo sería cuestión de usar inChecked en la variable que tenemos designada al CheckBox.
Por lo tanto en Kotlin escribimos el siguiente código:
fun checkBoxClic(view: View) { val modoNocturno: CheckBox = view as CheckBox val activado: Boolean = modoNocturno.isChecked }
En Java el código seria el siguiente:
public void checkBoxClic(View v){ CheckBox modoNocturno = ((CheckBox)v); Boolean activado = modoNocturno.isChecked(); }
En ambos casos:
- Primero, declaramos una variable llamada “modoNocturno” y la asociamos a la vista indicando que es un Checkbox.
- Luego declaramos una variable tipo Booleana llamada “activado” y con el comando isCheceked obtenemos si el Checkbox está marcado o no.
Usar el mismo método para más de un Checkbox en Android.
Podemos llamar desde XML al mismo método en nuestra actividad. Desde diferentes CheckBoxes.
Pero para que cada CheckBox realice una función distinta, necesitamos que nuestro código pueda diferenciar cual CheckBox se presionó.
Para esto solo es cuestión de obtener la ID de cada CheckBox e implementar alguna de las siguientes maneras (dejamos enlaces por si quieres profundizar en el tema):
- Usar una función if() para cada ID. Funciona en Java y en Kotlin.
- Podemos usar la función Switch(), solo en Java.
- También podemos usar la función When() en Kotlin.
En los 3 casos primero se identifica la ID del CheckBox y en base a esa ID realizaremos una acción determinada.
NOTA: Algo interesante y que puede ser confuso, es que cada CheckBox llama al método checkBoxClic() por separado. Por lo tanto, con una sola variable tipo CheckBox puedes controlas todos los CheckBoxes que se usen.
Para el siguiente ejemplo, tenemos 2 CheckBox. Uno para “modo nocturno” y el otro para ” uso de datos móviles”.
En kotlin usando la función When() quedaría así:
fun checkBoxClic(view: View) { val checkBox: CheckBox = view as CheckBox val activado: Boolean = modoNocturno.isChecked when(view.id) { R.id.modoNocturno -> //realiza una tarea para el checkBox de modo nocturno R.id.datosMoviles -> //realiza una tarea para el check box de datos Moviles Else -> //Cuando se llama al método desde otra ID. } }
Mientras que en Java con la función Switch() quedaría así:
public void checkBoxClic(View v){ CheckBox modoNocturno = ((CheckBox)v); Boolean activado = modoNocturno.isChecked(); Switch(modoNocturno.getId()) { Case R.id.modoNocturno: //realiza una tarea para el checkBox de modo nocturno breack; Case R.id.datosMoviles: //realiza una tarea para el check box de datos Moviles breack; default: //Cuando se llama al método desde otra ID. breack; }
Si quieres que ambos CheckBox estén relacionados, es decir, que solamente puedas elegir una opción. Al marcar un CheckBox se desmarque el otro.
Puedes usar Radio Groups y Radio Buttons. Ya que esa es su función, puedes tener 3 opciones y solo poder elegir una de ellas con los Radio Button.
Ve el tutorial de Radio Button y Radio Group en este enlace.
Para más tutoriales de Android Studio ve l sección de Android.