tus camisetas frikis en camisetafriki.com
Home > Android, Programacion > Android: Cambiar el color de un botón sin alterar su comportamiento

Android: Cambiar el color de un botón sin alterar su comportamiento

August 23rd, 2010 Leave a comment Go to comments

Últimamente ando con temas de Android en el curro y estoy aprendiendo un montón, tanto que tengo pensados unas serie de posts sobre Android donde contaré cómo hacer aquellas cosas que no están demasiado bien explicadas en la documentación, o que hay que investigar un poco para conseguir hacerlas.

Como aún sigo trasteando, voy a empezar con una entrada cortita.

En este caso queremos pintar un botón de un color que no sea el del tema que estemos usando pero no queremos coger el photoshop y currarnos un botón bonito y sombreado desde cero y todos sus estados de seleccionado, pulsado, etc. solo para cambiarle el color, así que tiraremos de una función muy sencilla integrada en Android que consiste en aplicarle un filtro de color alpha al botón en cuestión partiendo de la base del típico botón gris:

boton coloreado

Para lograr esto sólo tenemos que aplicar esta línea:

1
button.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);

Siendo 0xFFFF0000 el color en formato ARGB que queremos aplicar, en este caso, rojo.

Es muy interesante poder aplicar este tipo de filtros porque nos permite hacer un montón de efectos sobre los controles predefinidos en Android. Esta técnica no es exclusiva de Android, sino que también es muy usada en Photoshop para cambiar colores por ejemplo.

Aquí una tablita con las operaciones que se pueden hacer (no se si Android soporta todas)
alpha composition

(fuente: Stack Overflow)

Categories: Android, Programacion Tags:
  • agradecido

    Gracias Fernando!!
    No conocía la existencia de setColorFilter y me ha venido como anillo al dedo, aunque la verdad que me gustaría declararlo en el XML.
    Aún así, me ha venido muuuuuuu bien!!

    P.D. : Si sabes la manera de hacerlo desde el XML, te lo agradecería todavía más si me lo mandaras a hgramaje2@gmail.com  ;)

  • Anonymous

    Me temo que no es posible declararlo en el xml, sino sería genial, pero puedes heredar tus actividades de una que en el oncreate se recorra todo el árbol del layout y lo aplique a los botones o crear tu propio botón que extienda de button y lo aplique en el ondraw por ejemplo (se me acaba de ocurrir)
    El 30/11/2011 10:24, “Disqus”
    escribió: