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.Coloredestilo que utiliza el tema colorButtonNormalpara el color deshabilitado y colorAccentpara el color habilitado.
Esto le permite aplicarlo a su botón directamente a través de
<Button
...
style="@style/Widget.AppCompat.Button.Colored" />
Si necesita una colorButtonNormalo personalizada colorAccent, puede usar una ThemeOverlaycomo se explica en este consejo profesional y android:themeen el botón.
Respuesta anterior
Puede usar un dibujable en su directorio v21 para su fondo como:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item android:drawable="?attr/colorPrimary"/>
</ripple>
Esto asegurará que su color de fondo sea ?attr/colorPrimaryy 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:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/primaryPressed" android:state_pressed="true"/>
<item android:drawable="@color/primaryFocused" android:state_focused="true"/>
<item android:drawable="@color/primary"/>
</selector>
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.