lunes, 13 de octubre de 2014

Botones de estado

Un botón de estado puede tomar dos valores posibles: activo o inactivo. Podemos añadir botón de estado estándar a nuestra plantilla con el elemento ToggleButton. A partir de la versión 4.0 de Android contamos con un nuevo tipo de botón de estado Switch con control deslizante.
Botón de estado estándar.

Botón de estado con control deslizante (Android 4.0+).

ToggleButton y Switch son subclases de la clase CompoundButton por lo que funcionan de manera similar.

Respondiendo al evento clic.

Cuando el usuario pulsa sobre un botón de estado, el objeto asociado ToggleButton o Switch recibe el evento clic. Para definir el método encargado de gestionar dicho evento, podemos utilizar el atributo android:onClick de un elemento determinado. El valor para este atributo será el nombre del método al que queremos que se llame cuando el usuario pulsa sobre el botón. Será la actividad asociada a la plantilla la encargada de implementar dicho método. Por ejemplo:
<ToggleButton 
    android:id="@+id/togglebutton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textOn="Vibrate on"
    android:textOff="Vibrate off"
    android:onClick="onToggleClicked"/>
Desde la actividad implementamos el método onToggleClicked:
public void onToggleClicked(View view) {
    // on vale true si el botón se encuentra activo.
    // on vale false si el botón no se encuentra activo.
    boolean on = ((ToggleButton) view).isChecked();
    
    if (on) {
        // Habilitar vibración.
    } else {
        // Inhabilitar vibración.
    }
}

El método especificado en el atributo android:onClick debe tener la misma signatura que la del ejemplo, es decir, que debe cumplir los siguientes requisitos:
  • Ser público.
  • Devolver void.
  • Definir un único argumento de tipo View (la vista sobre la que se pulsa).

Truco. Si necesitamos cambiar el estado del botón en tiempo de ejecución, podemos hacerlo con los métodos setChecked(boolean) o toggle().

Usando la interfaz OnCheckedChangeListener

Podemos gestionar el evento clic de un botón de estado desde nuestro código en tiempo de ejecución. Para ello, tendremos que acceder a su instancia ToggleButton o Switch y asignarle una implementación de la interfaz CompoundButton.OnCheckedChangeListener a través del método setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener):
ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton);
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            // El botón está activo.
        } else {
            // El botón está inactivo.
        }
    }
});

No hay comentarios:

Publicar un comentario