Un CheckBox es un tipo concreto de botón que tiene dos estados, puede encontrarse marcado (checked) o desmarcado (unchecked).
Al contrario que los RadioButton, los CheckBox no se suelen utilizar en ningún ViewGroup específico y, por tanto, pueden encontrarse varios de ellos en la misma aplicación y el estado de uno no afecta al estado de los demás.
indica que el CheckButton se encuentra en el estado de marcado.
android:enabled
Heredado de TextView.
Indica que el CheckButton se ve y se puede pulsar o se vé pero no se puede pulsar.
PROGRAMAR EVENTOS DESDE CÓDIGO
La programación de eventos para los CheckBox no tiene ninguna dificultad con respecto a los que hemos visto anteriormente por lo que solamente vamos a ver el código:
MainActivity.kt
package com.example.android.appdeejemplo
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.CheckBox
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val cbList: List<CheckBox> = listOf(
findViewById(R.id.cbPop),
findViewById(R.id.cbRock),
findViewById(R.id.cbRap),
findViewById(R.id.cbTrap),
findViewById(R.id.cbClassic)
)
for (i in cbList) {
i.setOnClickListener{
onCheckBoxClicked(it)
}
}
}
fun onCheckBoxClicked(view: View){
val cb = view as CheckBox
if (cb.isChecked) {
Toast.makeText(this, "Le gusta la ${cb.text}", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "No le ha convencido la ${cb.text}", Toast.LENGTH_SHORT).show()
}
}
}
Como ven, también se pueden utilizar estructuras de datos como listas de Kotlin para hacer referencia a varias Views aunque no se encuentren en el mismo ViewGroup.
PERSONALIZACIÓN
Personalizar botón
Para personalizar un CheckBox podemos hacer uso de las listas de estados para crear un drawable que se ejecute cuando el CheckBox se encuentre en estado checked y otro cuando se encuentre en el estado unchecked.
Esto ya se ha explicado anteriormente así que vamos directamente a ver el código: