Me gustaría cambiar ligeramente el color de un botón estándar de Android para que coincida mejor con la marca de un cliente.
La mejor manera que he encontrado para hacer esto hasta ahora es cambiar el Button
dibujable por el dibujable ubicado en res/drawable/red_button.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/red_button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/red_button_focus" />
<item android:drawable="@drawable/red_button_rest" />
</selector>
Pero hacer eso requiere que realmente cree tres elementos dibujables diferentes para cada botón que quiero personalizar (uno para el botón en reposo, uno cuando está enfocado y otro cuando se presiona). Eso parece más complicado y no SECO de lo que necesito.
Todo lo que realmente quiero hacer es aplicar algún tipo de transformación de color al botón. ¿Hay alguna manera más fácil de cambiar el color de un botón que yo?
android
android-layout
emmby
fuente
fuente
Respuestas:
Descubrí que todo esto se puede hacer en un archivo con bastante facilidad. Ponga algo como el siguiente código en un archivo llamado
custom_button.xml
y luego configúrelobackground="@drawable/custom_button"
en la vista de botones:fuente
"Error: No resource found that matches the given name (at 'color' with value '@color/yellow1')"
¿Estas referencias están construidas en colores? Parece que necesito una res / valores / color.xml para hacer este trabajoA partir de la respuesta de Tomasz, también puede configurar mediante programación el tono de todo el botón utilizando el modo de multiplicación PorterDuff. Esto cambiará el color del botón en lugar de solo el tinte.
Si comienza con un botón sombreado gris estándar:
te dará un botón sombreado rojo,
le dará un botón verde sombreado, etc., donde el primer valor es el color en formato hexadecimal.
Funciona multiplicando el valor de color del botón actual por su valor de color. Estoy seguro de que también puedes hacer mucho más con estos modos.
fuente
import android.graphics.PorterDuff;
Mike, quizás te interesen los filtros de color.
Un ejemplo:
prueba esto para lograr el color que deseas.
fuente
Esta es mi solución que funciona perfectamente a partir de API 15 . Esta solución mantiene todos los efectos de clic de botón predeterminados, como material
RippleEffect
. No lo he probado en API inferiores, pero debería funcionar.Todo lo que necesitas hacer es:
1) Cree un estilo que solo cambie
colorAccent
:2) Agregue estas dos líneas a su
button
widget:Widget de botón de muestra
fuente
colorAccent
influye más que solo el fondo del botón.Ahora también puede utilizar de appcompat-v7 AppCompatButton con el
backgroundTint
atributo:fuente
app:backgroundTint
lugar deandroid:backgroundTint
cuando se usa AppCompat.Me gusta la sugerencia de filtro de color en respuestas anteriores de @conjugatedirection y @Tomasz; Sin embargo, descubrí que el código proporcionado hasta ahora no se aplicaba tan fácilmente como esperaba.
Primero, no se mencionó dónde aplicar y borrar el filtro de color. Es posible que haya otros buenos lugares para hacer esto, pero lo que me vino a la mente fue un OnTouchListener .
De mi lectura de la pregunta original, la solución ideal sería una que no involucrara ninguna imagen. La respuesta aceptada usando custom_button.xml de @emmby probablemente sea más adecuada que los filtros de color si ese es su objetivo. En mi caso, estoy comenzando con una imagen png de un diseñador de interfaz de usuario de cómo se supone que debe ser el botón. Si configuro el fondo del botón para esta imagen, la retroalimentación de resaltado predeterminada se pierde por completo. Este código reemplaza ese comportamiento con un efecto de oscurecimiento programático.
Extraje esto como una clase separada para la aplicación a múltiples botones, que se muestra como una clase interna anónima solo para entender la idea.
fuente
Si está haciendo botones de color con XML, puede hacer que el código sea un poco más limpio especificando el estado enfocado y presionado en un archivo separado y reutilizarlos. Mi botón verde se ve así:
fuente
La solución más corta que funciona con cualquier versión de Android:
Notas / Requisitos :
app:
espacio de nombres y no elandroid:
espacio de nombres!versión de appcompat> 24.2.0
dependencias {compile 'com.android.support:appcompat-v7:25.3.1'}
Explicacion :
fuente
app:backgroundTint="@color/my_color"
no funcionó.android:backgroundTint="@color/my_color"
funcionó perfectamente sin embargo.Estoy usando este enfoque
style.xml
Como puede ver desde arriba, estoy usando un estilo personalizado para mi botón. El color del botón corresponde al color de acento. Considero que este es un enfoque mucho mejor que la configuración,
android:background
ya que no perderé el efecto dominó que proporciona Google.fuente
Hay una manera mucho más fácil ahora: android-holo-colors.com
Le permitirá cambiar los colores de todos los holo dibujables (botones, hiladores, ...) fácilmente. Selecciona el color y luego descarga un archivo zip que contiene dibujos para todas las resoluciones.
fuente
Úselo de esta manera:
fuente
En
<Button>
usoandroid:background="#33b5e5"
. o mejorandroid:background="@color/navig_button"
fuente
La biblioteca de componentes DroidUX tiene un
ColorButton
widget cuyo color se puede cambiar fácilmente, tanto a través de la definición xml como mediante programación en tiempo de ejecución, por lo que incluso puede permitir que el usuario configure el color / tema del botón si su aplicación lo permite.fuente
También puede usar esta herramienta en línea para personalizar su botón http://angrytools.com/android/button/ y usar
android:background="@drawable/custom_btn"
para definir el botón personalizado en su diseño.fuente
Puede configurar el tema de su botón para esto
fuente
Una manera fácil es definir una clase de botón personalizada que acepte todas las propiedades que desee, como radio, gradiente, color presionado, color normal, etc. y luego usar eso en sus diseños XML en lugar de configurar el fondo usando XML. Una muestra está aquí
Esto es extremadamente útil si tiene muchos botones con las mismas propiedades como radio, color seleccionado, etc. Puede personalizar su botón heredado para manejar estas propiedades adicionales.
Resultado (no se utilizó el selector de fondo).
Botón normal
Botón presionado
fuente
La forma en que hago un botón de estilo diferente que funciona bastante bien es subclasificar el objeto Botón y aplicar un filtro de color. Esto también maneja los estados habilitados y deshabilitados aplicando un alfa al botón.
fuente
valores \ styles.xml
entonces:
fuente
Según las pautas de diseño de material, debe usar el estilo como se muestra a continuación.
y en el diseño, agregue esta propiedad a su botón
fuente
Es simple ... agregue esta dependencia en su proyecto y cree un botón con 1. Cualquier forma 2. Cualquier color 3. Cualquier borde 4. Con efectos materiales
https://github.com/manojbhadane/QButton
fuente