miércoles, 8 de octubre de 2014

Botones radiales

Los botones radiales permiten al usuario seleccionar una opción de un conjunto de opciones mutuamente excluyentes.


Utilizaremos el elemento RadioButton para añadir un botón radial a nuestra plantilla. Además, tendremos que definir los botones dentro de un elemento RadioGroup si queremos que la selección sea excluyente.

Respondiendo al evento clic.

Cuando el usuario pulsa sobre un botón radial, el objeto asociado recibe el evento clic. Para asociar el evento con la ejecución de un método, usaremos el atributo android:onClick de un elemento RadioButton. El valor especificado para este atributo se corresponderá con el nombre del método implementado por la actividad asociada a la plantilla. En el siguiente ejemplo contamos con dos botones radiales que llaman al método onRadioButtonClicked cuando pulsamos sobre cualquiera de ellos:
<?xml version="1.0" encoding="utf-8"?>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <RadioButton android:id="@+id/radio_pirates"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/pirates"
        android:onClick="onRadioButtonClicked"/>
    <RadioButton android:id="@+id/radio_ninjas"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/ninjas"
        android:onClick="onRadioButtonClicked"/>
</RadioGroup>
Nota. La clase RadioGroup es una subclase de LinearLayout donde por defecto la distribución de sus elementos es vertical.

Dentro de la actividad tendremos implementado el método onRadioButtonClicked:
public void onRadioButtonClicked(View view) {
    // checked vale true si se trata de la opción seleccionada por el usuario.
    // checked vale false la opción no ha sido seleccionada por el usuario.
    boolean checked = ((RadioButton) view).isChecked();
    
    // Comprobamos qué botón ha sido pulsado.
    switch(view.getId()) {
        case R.id.radio_pirates:
            if (checked)
                // Los piratas son los mejores.
            break;
        case R.id.radio_ninjas:
            if (checked)
                // Los ninjas mandan.
            break;
    }
}
El método asociado al atributo android:onClick debe tener la misma signatura a la del ejemplo, es decir, debe cumplir con los siguientes requisitos:
  • Ser público.
  • Devolver void.
  • Definir un único argumento de tipo View (la vista que ha sido pulsada).

Truco. Si necesitamos cambiar el valor de un botón radial en tiempo de ejecución, podemos usar los métodos setChecked(boolean) o toggle().

No hay comentarios:

Publicar un comentario