Antes de que AppCompat
saliera la actualización hoy, pude cambiar el color de los botones en Android L pero no en versiones anteriores. Después de incluir la nueva actualización de AppCompat, no puedo cambiar el color de ninguna de las versiones, cuando lo intento, el botón simplemente desaparece. ¿Alguien sabe cómo cambiar el color del botón?
Las siguientes imágenes muestran lo que quiero lograr:
El botón blanco es el predeterminado, el rojo es lo que quiero.
Esto es lo que estaba haciendo anteriormente para cambiar el color de los botones en styles.xml
:
<item name="android:colorButtonNormal">insert color here</item>
y hacerlo dinámicamente:
button.getBackground().setColorFilter(getResources().getColor(insert color here), PorterDuff.Mode.MULTIPLY);
También cambié el tema padre de @android:style/Theme.Material.Light.DarkActionBar
aTheme.AppCompat.Light.DarkActionBar
Respuestas:
Corregido oficialmente en Support Library rev.22 (viernes 13 de marzo de 2015). Ver problema relevante del código de google:
https://issuetracker.google.com/issues/37008632
Ejemplo de uso
theme.xml:
v21 / theme.xml
fuente
android:theme="@style/ColoredButton"
y en styles.xml<style name="ColoredButton" parent="Widget.AppCompat.Button"> <item name="colorButtonNormal">@color/button_yellow</item> </style>
Editar (22.06.2016):
La biblioteca de Appcompat comenzó a admitir botones de material después de que publiqué la respuesta original. En esta publicación puede ver la implementación más fácil de botones planos y elevados.
Respuesta original
Dado que AppCompat aún no admite el botón, puede usar xml como fondo. Para hacerlo, eché un vistazo al código fuente de Android y encontré los archivos relacionados para los botones de material de estilo.
1 - Mira la implementación original del botón de material desde la fuente.
Eche un vistazo a btn_default_material.xml en el código fuente de Android .
Puede copiar el archivo en la carpeta drawable-v21 de su proyecto. Pero no toques el color attr aquí. El archivo que necesita cambiar es el segundo archivo.
drawable-v21 / custom_btn.xml
2 - Obtenga la forma del botón de material original
Como se da cuenta, hay una forma utilizada dentro de este dibujo que puede encontrar en este archivo del código fuente .
3 - Obtener dimensiones del botón de material
Y en este archivo hay algunas dimensiones utilizadas del archivo que puede encontrar aquí . Puede copiar todo el archivo y ponerlo en su carpeta de valores . Esto es importante para aplicar el mismo tamaño (que se usa en los botones de material) a todos los botones
4 - Crear otro archivo dibujable para versiones anteriores
Para versiones anteriores, debe tener otro dibujable con el mismo nombre. Estoy poniendo directamente los elementos en línea en lugar de hacer referencia. Es posible que desee hacer referencia a ellos. Pero, de nuevo, lo más importante son las dimensiones originales del botón de material.
drawable / custom_btn.xml
Resultado
Su botón tendrá un efecto dominó en los dispositivos Lollipop. Las versiones anteriores tendrán exactamente el mismo botón, excepto el efecto dominó. Pero dado que proporciona elementos extraíbles para diferentes estados, también responderán a eventos táctiles (como en la forma anterior).
fuente
Esto se ha mejorado en v23.0.0 de la biblioteca AppCompat con la adición de más temas, incluidos
En primer lugar, incluya la dependencia de appCompat si aún no lo ha hecho
ahora ya que necesita usar v23 de la aplicación compatible, ¡también tendrá que apuntar a SDK-v23!
En tus
values/theme
En tus
values/style
En tus
values-v21/style
Dado que el tema de su botón se basa en
Widget.AppCompat.Button.Colored
El color del texto en el botón es por defecto blanco!pero parece que hay un problema cuando deshabilita el botón, el botón cambiará su color a gris claro, ¡pero el color del texto seguirá siendo blanco!
¡Una solución para esto es establecer específicamente el color del texto en el botón en blanco! como lo hice en el estilo que se muestra arriba.
ahora puede simplemente definir su botón y dejar que AppCompat haga el resto :)
Estado discapacitado
Estado habilitado
Editar:
Para agregar
<Button android:theme="@style/BrandButtonStyle"/>
fuente
<Button android:theme="@style/BrandButtonStyle"/>
. Tiene que ser eltheme
atributo y no elstyle
atributo.En la Biblioteca de soporte de Android 22.1.0, Google notó el
Button
tinte. Entonces, otra forma de personalizar el color de fondo del botón es usar elbackgroundTint
atributo.Por ejemplo,
fuente
Para admitir botones de colores, use la última biblioteca de AppCompat (> 23.2.1 ) con:
AppCompat Widget:
AppCompat Style:
¡NÓTESE BIEN! Para establecer un color personalizado en xml: use attr: en
app
lugar deandroid
(usar
alt+enter
o declararxmlns:app="http://schemas.android.com/apk/res-auto"
usarapp
)aplicación : backgroundTint = "@ color / your_custom_color"
Ejemplo:
fuente
Con la última Biblioteca de soporte, podría heredar su actividad
AppCompatActivity
, por lo que se inflaráButton
comoAppCompatButton
y le dará la oportunidad de diseñar el color de cada botón en el diseño con el uso deandroid:theme="@style/SomeButtonStyle"
, dondeSomeButtonStyle
está:Trabajó para mí en 2.3.7, 4.4.1, 5.0.2
fuente
android:theme
y nostyle
. También puedes agregarcolorControlHighlight
ycolorControlActivated
.Theme.AppCompat.Light
en su lugar.si quieres debajo del estilo
agrega este estilo a tu botón
si quieres este estilo
agregue el siguiente código
fuente
compile 'com.android.support:appcompat-v7:23.1.0'
Debes tener que agregar.La respuesta está en TEMA, no en estilo.
El problema es que el color del botón se adhiere al colorButtonNormal del tema. He tratado de cambiar el estilo de muchas maneras diferentes sin suerte. Así que cambié el tema del botón .
Cree un tema con colorButtonNormal y colorPrimary:
Usa este tema en el botón
El "AppTheme.Button" puede ser cualquier cosa que extienda el estilo del botón como aquí. Uso el color primario para el color del texto:
Y obtienes el botón en cualquier color que quieras que sea compatible con el diseño del material.
fuente
Acabo de crear una biblioteca de Android, que le permite modificar fácilmente el color del botón y el color ondulado
https://github.com/xgc1986/RippleButton
No necesita crear un estilo para cada botón que desee con un color diferente, lo que le permite personalizar los colores al azar
fuente
esto funciona para mí con appcompat-v7: 22.2.0 en android + 4.0
en tu styles.xml
en su archivo de diseño
fuente
Diseño:
styles.xml:
color / button_background_selector.xml:
color / button_text_selector.xml:
fuente
Para aquellos que usan un
ImageButton
aquí, así es como lo haces:En style.xml:
en v21 / style.xml:
Luego, en su archivo de diseño:
fuente
Si usa una solución de estilo con colorButtonNormal , no olvide heredar de Widget.AppCompat.Button.Colored para que el efecto dominó funcione;)
Me gusta
fuente
Otra solución simple usando el AppCompatButton
fuente
Utilizar:
O incluso :
y eso le dará un color personalizado al botón.
fuente
Si solo desea el botón de material "Plano", puede personalizar su fondo usando el atributo selectableItemBackground como se explica aquí .
fuente
Para cambiar el color de un solo botón
fuente
Para mí, el problema era que en Android 5.0
android:colorButtonNormal
no tenía ningún efecto, y en realidad, ningún elemento del tema (comoandroid:colorAccent
), pero en Android 4.4.3, por ejemplo, sí. El proyecto se configuró concompileSdkVersion
ytargetSdkVersion
para 22, así que hice todos los cambios como @Muhammad Alfaifi sugirió, pero al final, me di cuenta de que el problema era buildToolsVersion , que no se actualizó. Una vez que cambié a 23.0.1 , todo comenzó a funcionar casi de manera normal. Ahora, elandroid:colorButtonNormal
todavía no tiene efecto, pero al menos el botón reacciona aandroid:colorAccent
, lo que para mí es aceptable.Espero que esta pista pueda ayudar a alguien. Nota: He aplicado el estilo directamente al botón, ya que el botón
android:theme=[...]
tampoco tuvo efecto.fuente
Una forma de lograr esto le permite señalar un estilo y NO tema TODOS los botones de su aplicación de la misma manera.
En themes.xml agrega un tema
Ahora en styles.xml agregar
Ahora en su diseño, simplemente apunte al ESTILO en su Botón
fuente
ACTUALIZAR
Use la biblioteca de soporte de diseño (23.2.0) y los widgets compactos de aplicaciones como se muestra a continuación
En la Biblioteca de soporte de Android 22.1 :
La lista completa de widgets con tinte:
Diseño de materiales para dispositivos pre-piruletas :
fuente
Si desea utilizar el estilo AppCompat como Widget.AppCompat.Button , Base.Widget.AppCompat.Button.Colored , etc., debe usar estos estilos con vistas compatibles de la biblioteca de soporte.
El siguiente código no funciona para dispositivos pre-lolipop:
Debe usar AppCompatButton para habilitar los estilos de AppCompat:
fuente
ImageView
se reemplazaAppCompatImageView
y debería ser lo mismo con todos los widgets, que tienen laAppCompat
versión correspondiente .android.support.v7.widget.AppCompatImageView
explícitamente.last target version
@power?Yo uso esto. Efecto ondulación y botón de sombra de trabajo.
style.xml
Botón en el diseño:
fuente
En realidad, no quería un cambio en mis estilos de botones personalizados, pero desafortunadamente ya no funcionaban.
Mi aplicación tiene una minSdkVersion de 9 y todo funcionó antes.
No sé por qué, pero desde que eliminé el Android: antes del buttonStyle parece funcionar nuevamente
ahora = trabajando:
<item name="buttonStyle">@style/ButtonmyTime</item>
antes = solo botones de material gris:
<item name="android:buttonStyle">@style/ButtonmyTime</item>
No tengo una carpeta especial para la nueva versión de Android ya que mis botones son bastante planos y deberían verse igual en todas las versiones de Android.
Tal vez alguien pueda decirme por qué tuve que eliminar "android:". ImageButton todavía funciona con "android:"
fuente
Después de 2 días buscando respuestas, el tema de botones no funcionó para mí en API <21.
Mi única solución es anular el tinte AppCompatButton no solo con el tema básico de la aplicación "colorButtonNormal" sino también con el fondo de la vista.
Luego puede definir el color de su botón de esta manera:
fuente
Esta respuesta SO me ayudó a llegar a una respuesta https://stackoverflow.com/a/30277424/3075340
Utilizo este método de utilidad para configurar el tono de fondo de un botón. Funciona con dispositivos pre-lollipop:
Cómo usar en código:
De esta manera, no tiene que especificar una ColorStateList si solo desea cambiar el tono del fondo y nada más que mantener los bonitos efectos de los botones y demás.
fuente
Me puse
android:textColor
a@null
mi botón de tema y me ayuda.styles.xml
some_layout.xml
Ahora el color del texto del botón se
colorAccent
define enAppTheme
fuente
si usa kotlin, ¿puede ver que todos los atributos de MaterialButton son compatibles? No use el atributo android: background. MaterialButton gestiona su propio fondo dibujable, y establecer un nuevo fondo significa que el color desactivado del botón Material ya no puede garantizar que los nuevos atributos que introduce funcionarán correctamente. Si se cambia el fondo predeterminado, el botón Material no puede garantizar un comportamiento bien definido. En MainActivity.kt
En activity_main.xml
recurso: ejemplo de color de cambio de botón de material
fuente
si desea hacer esto mediante un código en cualquier color, use esto:
fuente