martes, 16 de agosto de 2011

Elementos básicos del interface de usuario – Buttons - Basic elements of the user interface

Button, al igual que EditText, es una subclase de TextView, y su definición en nuestro Layout se hace incluyendo el siguiente código en el fichero xml :

      <Button 
          android:id="@+id/boton01"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/boton01"
          android:onClick="apretaBoton"
          />         

Como en el resto de elementos ya conocidos podemos incluir multitud de atributos que modifcan su apariencia o su situación dentro del Layout que lo contiene, pero voy a hacer especial incapié en el atributo ‘android:onClick’ puesto que es especialmente interesante. El valor de este atributo indica el nombre de la clase Java que se ejecutará cuando el botón sea presionado.  
Para verlo funcionar incluimos este código en nuestro fuente Java:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    public void apretaBoton (View view) {
      TextView texto01 = (TextView) findViewById(R.id.texto01);
      texto01.setText("Me han apretado!!");
    }

Como veis he definido una clase pública llamada apretaBoton que recibe como parámetro único un dato tipo View que es la conexión con el elemento del Layout que lo llama.
 

Otra forma de conseguir el mismo resultado es definiendo un objeto ‘onClickListener’ asociado al botón. Este objeto lleva implícita la clase ‘onClick’ en la que definimos lo que debe ejecutarse cuando se aprete el botón :

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        // Capturo el botón a través de su atributo id
        Button boton01 = (Button) findViewById(R.id.boton01);

        // Asocio el objeto onClickLIstener al boton
        boton01.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                apretaBoton();  // Indico la clase a ejecutar
             }
        });
    }
    // En este caso no recibe ningún parámetro de entrada
    public void apretaBoton () {
      TextView texto01 = (TextView) findViewById(R.id.texto01);
      texto01.setText("Me han apretado!!");
    }

Si utilizamos este método, vemos cómo la clase apretaBoton no necesita ningún parámetro de entrada.
Por cuestiones de claridad, yo prefiero utilizar esta última forma de tratar los botones, aunque podeis utilizar cualquiera.

PERSONALIZANDO NUESTRO BOTONES

Si la apariencia estandard de los botones Android no es de nuestro agrado, podemos modificarla, incluso hacer que varíe su forma según el estado del botón.  Para hacer esto debemos definir un fichero XML en la carpeta res/drawable en el que asociamos la imagen a mostrar según el estado del botón:

Fichero res/drawable/botones.xml
 
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_green"
          android:state_pressed="true" />
    <item android:drawable="@drawable/button_red"
          android:state_focused="true" />
    <item android:drawable="@drawable/button_blue" />
</selector> 

Como veis se asocia el estado de pulsado (‘state_pressed’) con la image ‘button_green’


El estado de seleccionado, es decir, cuando recibe el foco, (‘state_focused’) con la imagen ‘button_red’
 


Y el estado normal con la imagen ‘button_blue’
 
Por último incluimos un nuevo atributo a la definición XML del botón indicando : 
 
android:background="@drawable/botones"
 
Con este atributo, normalmente indicamos el archivo drawable que queremos mostrar como botón, sin embargo, al indicar el nombre de un archivo XML podemos personaliazrlo aún más haciendo que cambie según su estado.

Estado ‘Normal’
 


Estado’Focused’ al bajar con las flechas del teclado del simulador
 

Estado ‘Pressed’ al pulsar sobre él
 
La estructura del proyecto ha quedado de la siguiente forma:

La información para esta entrada ha sido obtenida del API de Android en la que podeis profundizar algo más.

Hasta la próxima.


 




No hay comentarios:

Publicar un comentario