Під час використання android:backgroundви замінюєте велику частину стилю і виглядаєте і відчуваєте кнопку з порожнім кольором.
Оновлення: Як в випуск версії 23.0.0 від AppCompat , є новий Widget.AppCompat.Button.Coloredстиль , який використовує вашу тема colorButtonNormalдля інвалідів кольору іcolorAccent для задіяного кольору.
Це дозволяє застосувати його до своєї кнопки безпосередньо через
<Button
...
style="@style/Widget.AppCompat.Button.Colored" />
Якщо вам потрібен користувальницький colorButtonNormalабо colorAccent, ви можете скористатись ThemeOverlayописаним у цій підказці та android:themeна кнопці.
Попередній відповідь
Ви можете використовувати малюнок у каталозі v21 для свого фону, наприклад:
<?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>
Це забезпечить ваш фоновий колір ?attr/colorPrimaryта має пульсаційну анімацію за замовчуванням?attr/colorControlHighlight (яку ви також можете встановити у своїй темі, якщо хочете).
Примітка: вам доведеться створити спеціальний селектор для менш ніж 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>
Припустимо, що у вас є кілька кольорів, які вам потрібні для типового, натиснутого та зосередженого стану. Особисто я зробив знімок екрану пульсації посередині, вибравши і витягнув з цього первинний / зосереджений стан.