Редагувати (22.06.2016):
Бібліотека Appcompat почала підтримувати кнопки матеріалів після того, як я опублікувала оригінальну відповідь. У цій публікації ви можете побачити найпростішу реалізацію піднятих і плоских кнопок.
Оригінальний відповідь:
Оскільки цей AppCompat не підтримує цю кнопку, ви можете використовувати xml як фони. Для цього я ознайомився з вихідним кодом Android і знайшов відповідні файли для стилізації кнопок матеріалу.
1 - Подивіться на оригінальну реалізацію кнопки матеріалу з джерела.
Погляньте на btn_default_material.xml на вихідний код для Android .
Ви можете скопіювати файл у папку dravable-v21 своїх проектів. Але не торкайтеся тут кольорів attr. Файл, який потрібно змінити, - це другий файл.
dravable-v21 / custom_btn.xml
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item android:drawable="@drawable/btn_default_mtrl_shape" />
</ripple>
2 - Отримайте форму кнопки оригінального матеріалу
Як ви розумієте, всередині цього малювання є форма, яку ви можете знайти в цьому файлі вихідного коду .
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="?attr/colorButtonNormal" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
3 - Отримання розмірів кнопки матеріалу
І в цьому файлі ви знайдете деякі параметри, використані з файлу, який ви можете знайти тут . Ви можете скопіювати весь файл і ввести свої значення папку зі . Це важливо для застосування однакового розміру (який використовується у кнопках матеріалів) до всіх кнопок
4 - Створіть ще один файл, що виводиться для старих версій
Для старих версій у вас повинен бути інший малюнок із таким же ім’ям. Я безпосередньо ставлю елементи в рядку замість посилання. Ви можете посилатися на них. Але знову ж таки, найголовніше - це оригінальні розміри кнопки матеріалу.
dravable / custom_btn.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- pressed state -->
<item android:state_pressed="true">
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="@color/PRESSED_STATE_COLOR" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
</inset>
</item>
<!-- focused state -->
<item android:state_focused="true">
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="@color/FOCUSED_STATE_COLOR" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
</inset>
</item>
<!-- normal state -->
<item>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="@color/NORMAL_STATE_COLOR" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
</inset>
</item>
</selector>
Результат
Ваша кнопка матиме пульсаційний ефект на пристроях Lollipop. У старих версіях буде точно така ж кнопка, крім ефекту пульсацій. Але оскільки ви надаєте чернетки для різних станів, вони також реагуватимуть на події, що торкаються (як старий спосіб).