Під час використання 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>
Припустимо, що у вас є кілька кольорів, які вам потрібні для типового, натиснутого та зосередженого стану. Особисто я зробив знімок екрану пульсації посередині, вибравши і витягнув з цього первинний / зосереджений стан.