When you use
android:background, you are replacing much of the styling and look and feel of a button with a blank color.
Update: As of the version 23.0.0 release of AppCompat, there is a new
Widget.AppCompat.Button.Colored style which uses your theme's
colorButtonNormal for the disabled color and
colorAccent for the enabled color.
This allows you apply it to your button directly via
<Button ... style="@style/Widget.AppCompat.Button.Colored" />
If you need a custom
colorAccent, you can use a
ThemeOverlay as explained in this pro-tip and
android:theme on the button.
You can use a drawable in your v21 directory for your background such as:
<?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>
This will ensure your background color is
?attr/colorPrimary and has the default ripple animation using the default
?attr/colorControlHighlight (which you can also set in your theme if you'd like).
Note: you'll have to create a custom selector for less than 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>
Assuming you have some colors you'd like for the default, pressed, and focused state. Personally, I took a screenshot of a ripple midway through being selected and pulled the primary/focused state out of that.
~ Answered on 2014-11-01 05:21:19