Button
Explicación del concepto de Button
Last updated
Explicación del concepto de Button
Last updated
Hereda de TextView
.
Un Button es una interfaz de usuario que permite al usuario clicar para ejecutar una acción.
La clase Button
, a pesar de heredar directamente de TextView
, tiene muchas de las funcionalidades que ofrece esta última bloqueadas. Esto se debe a que las clase Button integra por defecto un estilo concreto.
Para generar un botón en nuestro archivo de layout utilizamos el siguiente código:
Como podemos ver, el Botón tiene:
Todo el texto en mayúscula.
tTene los bordes redondeados.
Se ha añadido un color de fondo (que corresponde con colorPrimary
en el themes.xml
).
Cuando se pulsa reproduce un sonido y una pequeña animación de pulsado.
Un padding.
Un margin (aunque en la imagen no se ve debido a que ya existe un margin del layout).
Si queremos modificar la mayoría de estas características del botón, tendremos que utilizar otra clase:
Utilizando esta clase android.widget.Button
, tenemos acceso a todos los atributos que hereda de TextView
. Sin embargo, habrá alguno de ellos que no funcionará como esperamos, ya que pueden entrar en conflicto con algunas de las características intrínsecas del botón.
Como hemos visto, la clase Button hereda directamente de la clase TextView por lo que puede utilizar todos los atributos de esta última clase. Sin embargo, al estar algunos de ellos protegidos, vamos a ver algunos que son importantes en el caso de la clase Button:
NO SE RECOMIENDA EL USO DE ESTE ATRIBUTO.
En los EditText
hemos visto que se puede modificar el color de fondo de una View con el atributo android:background
. Sin embargo, si lo utilizamos en el contexto de un Button, perderemos parte del estilo predefinido del boton:
Para evitar que esto ocurra, si queremos cambiar el color de fondo, utilizamos el siguiente atributo:
Permite modificar el color de fondo de un objeto de la clase Button sin afectar al estilo del botón:
De la misma manera que hicimos con los TextView
(un Button
no deja de ser una de sus clases hijo) se utiliza el método setOnClickListener
para desarrollar el código que se va a ejecutar al hacer click en el botón.
La personalización de los objetos de tipo Button es ilimitada. En este caso vamos a ver tres posibilidades para que las tenga de ejemplo:
Para este primer ejemplo vamos a hacer un Boton de inicio de sesión que tenga los bordes más redondeados y contenga una pequeña imagen en su interior.
Para ello vamos a utilizar un nuevo concepto que son las listas de estados en XML:
Un StateListDrawable
es un objeto de diseño definido en XML que usa varias imágenes distintas para representar el mismo gráfico, según el estado del objeto.
Por ejemplo, un widget Button
puede estar en varios estados (presionado, en foco o ninguno de estos) y, mediante un elemento de diseño de lista de estados, puedes cambiar la imagen de fondo para cada estado.
Puede describir la lista de estados en un archivo en formato XML. Cada gráfico se representa a través de un elemento <item>
dentro de un solo elemento <selector>
. Cada <item>
usa varios atributos para describir el estado en que debería usarse como gráfico del elemento de diseño.
Durante cada cambio de estado, se recorre de arriba abajo la lista de estados, y se utiliza el primer elemento que coincida con el estado actual; la selección no depende de la "mejor coincidencia", sino del primer elemento que cumple con los criterios mínimos del estado.
En este ejemplo el Botón no cambiará de estado, pero para diseñar el objeto en su estado permanente, podemos utilizar el mismo proceso, vamos a realizar varios pasos:
Crear el objeto de diseño XML, en este caso, con el nombre, corners:
Una vez tenemos el nuevo resource lo tenemos que completar con los items que queramos:<?xml version="1.0" encoding="utf-8"?>
Una vez tenemos esto podemos crear nuestro Boton con este diseño de Background. Para ello tendremos que utilizar la clase sin restrincciones android.widget.Button
Como se puede ver es un Botón mucho más redondeado e incluye una pequeña imagen en su interior.
En este caso, utilizando el mismo concepto que en el anterior vamos a crear un botón circular.
Para ello volvemos a crear un nuevo Resource que vamos a llamar oval.xml
. En este Resource vamos a utilizar el item shape de tipo oval para crear el círculo:
Posteriormente, solo tenemos que cambiar el atributo android:background y eliminar el atributo android:backgroundTint ya que el color viene en el Resource marcado:
Por último vamos a ver como añadir un gradiente al fondo, es decir, un cambio de color progresivo (como en los wordart de office).
Para ello empezamos con un nuevo Resource que vamos a llamar gradient.xml
.
Como vemos estamos utilizando un rectangulo y colores para marcar los diferentes colores del van a aparecer en nuestro botón. Además de eso, hay que indicar el ángulo en el que se va a iniciar el gradiente.
Posteriormente retocamos la View en activity_main.xml:
Por último si retocamos el icono de email para que cuadre con la paleta de colores utilizada, cambiamos el color de la fuente, retocamos las esquinas y añadimos un poco de padding, tenemos un botón muy bonito y perfectamente funcional: