Estoy usando la biblioteca de soporte de Android v21.
He creado un botón con color de fondo personalizado. Los efectos de diseño de material como ondulación, revelación desaparecen (excepto la elevación al hacer clic) cuando uso el color de fondo.
<Button
style="?android:attr/buttonStyleSmall"
android:background="?attr/colorPrimary"
android:textColor="@color/white"
android:textAllCaps="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Button1"
/>
El siguiente es un botón normal y los efectos funcionan bien.
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:text="Button1"
/>
android
android-5.0-lollipop
Sathesh
fuente
fuente
Respuestas:
Cuando lo usa
android:background
, está reemplazando gran parte del estilo y la apariencia de un botón con un color en blanco.Actualización: a partir de la versión 23.0.0 de AppCompat , hay un nuevo
Widget.AppCompat.Button.Colored
estilo que utiliza el temacolorButtonNormal
para el color deshabilitado ycolorAccent
para el color habilitado.Esto le permite aplicarlo a su botón directamente a través de
Si necesita una
colorButtonNormal
o personalizadacolorAccent
, puede usar unaThemeOverlay
como se explica en este consejo profesional yandroid:theme
en el botón.Respuesta anterior
Puede usar un dibujable en su directorio v21 para su fondo como:
Esto asegurará que su color de fondo sea
?attr/colorPrimary
y tenga la animación de ondulación predeterminada usando la predeterminada?attr/colorControlHighlight
(que también puede establecer en su tema si lo desea).Nota: deberá crear un selector personalizado por menos de v21:
Suponiendo que tiene algunos colores que desea para el estado predeterminado, presionado y enfocado. Personalmente, tomé una captura de pantalla de una onda a mitad de camino de ser seleccionado y saqué el estado primario / enfocado de eso.
fuente
Hay otra solución simple para proporcionar un fondo personalizado para los botones "Planos" mientras se mantienen sus efectos "Materiales".
es decir:
Se puede usar para botones planos , funciona en API> = 11, y obtendrá un efecto dominó en> = 21 dispositivos, manteniendo los botones regulares en pre-21 hasta que AppCompat se actualice para admitir la ondulación allí también.
También puede usar selectableItemBackgroundBorderless para> = 21 botones solamente.
fuente
CardView
enfoque, ¡gracias por compartir!Aquí hay una manera simple y compatible con versiones anteriores para proporcionar efectos de onda a los botones elevados con el fondo personalizado.
Su diseño debería verse así
fuente
foreground
no tiene efecto antes del 23. google.com/…Me encontré con este problema hoy jugando con la biblioteca v22.
Suponiendo que está usando estilos, puede establecer la
colorButtonNormal
propiedad y los botones usarán ese color por defecto.Fuera de eso, aún puede crear un estilo para el botón y luego usarlo por botón si necesita una variedad de colores (no lo he probado, solo especulando).
Recuerde agregar
android:
antes de los nombres de los elementos en su estilo v21 .fuente
Con AppCompat (22.1.1+) puede agregar un estilo como este:
Y úsalo simplemente aplicando el estilo:
Cambiando programáticamente el color, descubrí que la única forma de actualizar el color (en API 15 o 16) era usar la 'lista de tonos de fondo' en su lugar. Y no elimina la agradable animación radial en dispositivos API 21:
Porque
button.setBackground(...)
ybutton.getBackground().mutate().setColorFilter(...)
no cambie el color del botón en API 15 y 16 como lo hacen en API 21.fuente
ColorStateList.valueOf( ... )
para construir un simpleColorStateList
de un solo color.ViewCompat.setBackgroundTintList(myButton, ColorStateList.valueOf(myColor);
JavadocsetSupportBackgroundTintList
dice que debería llamarse de esta manera.La respuesta de @ianhanniballake es absolutamente correcta y simple. Pero me llevó unos días entenderlo. Para alguien que no entiende su respuesta, aquí hay una implementación más detallada
=== O ===
fuente
colorButtonNormal
en el tema base@style/AppTheme
. Esto le da un color predeterminado a AppCompat para colorear los botones en consecuencia. Y luego puede usar su respuesta para tema una vista individualmente.android:theme="Theme.MaterialButton"
oandroid:theme="@style/Theme.MaterialButton"
android:theme="@style/Theme.MaterialButton"
. Gracias por tu corrección.Usé el backgroundTint y el primer plano:
fuente
Vine a esta publicación buscando una manera de tener un color de fondo de mi
ListView
artículo, pero manteniendo la onda.Simplemente agregué mi color como fondo y seleccionableItemBackground como primer plano:
Y funciona como un encanto. Supongo que la misma técnica podría usarse para los botones también. Buena suerte :)
fuente
Usar en
backgroundTint
lugar debackground
fuente
Si está interesado en ImageButton, puede probar esto:
fuente
v22.1
deappcompat-v7
introdujo algunas nuevas posibilidades. Ahora es posible asignar un tema específico solo a una vista.Entonces, en lugar de establecer el color deseado en un tema global, creamos uno nuevo y lo asignamos solo a
Button
Ejemplo:
Y usa este estilo como tema de tu
Button
fuente
Si está de acuerdo con el uso de una biblioteca de terceros, consulte traex / RippleEffect . Le permite agregar un efecto dominó a CUALQUIER vista con solo unas pocas líneas de código. Solo necesita envolver, en su archivo de diseño xml, el elemento que desea que tenga un efecto dominó con un
com.andexert.library.RippleView
contenedor.Como beneficio adicional, requiere Min SDK 9 para que pueda tener consistencia de diseño en todas las versiones del sistema operativo.
Aquí hay un ejemplo tomado del repositorio de GitHub de las bibliotecas:
Puede cambiar el color de ondulación agregando este atributo al elemento RippleView:
app:rv_color="@color/my_fancy_ripple_color
fuente
Utilizar
y el color se aceptará en pre-lolipop
fuente
Hay dos enfoques explicados en el gran tutorial de Alex Lockwood: http://www.androiddesignpatterns.com/2016/08/coloring-buttons-with-themeoverlays-background-tints.html :
Enfoque n. ° 1: modificación del color de fondo del botón con una superposición de temas
Enfoque n. ° 2: Configuración del tinte de fondo de AppCompatButton
fuente
Aplicando programáticamente los colores:
fuente
Intenté esto:
en lugar de cambiar la propiedad de fondo. Esto no elimina el efecto material.
fuente