Изменить (22.06.2016):
Библиотека Appcompat начала поддерживать кнопки материалов после того, как я опубликовал исходный ответ. В этом посте вы можете увидеть простейшую реализацию поднятых и плоских кнопок.
Оригинальный ответ:
Поскольку этот AppCompat не поддерживает кнопку, вы можете использовать xml в качестве фона. Для этого я взглянул на исходный код Android и нашел соответствующие файлы для оформления кнопок материалов.
1 - Посмотрите на оригинальную реализацию материала кнопки из источника.
Взгляните на btn_default_material.xml в исходном коде Android .
Вы можете скопировать файл в папку вашего проекта drawable-v21. Но не трогай цвет здесь. Файл, который нужно изменить, является вторым файлом.
Drawable-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 - Создайте еще один нарисованный файл для старых версий
Для более старых версий у вас должен быть другой drawable с тем же именем. Я непосредственно помещаю пункты в линию вместо ссылки. Вы можете ссылаться на них. Но опять же, самое главное, это оригинальные размеры материала кнопки.
рисуем / 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. Старые версии будут иметь точно такую же кнопку, кроме эффекта ряби. Но с тех пор, как вы предоставите рисованные элементы для разных состояний, они также будут реагировать на сенсорные события (как по старинке).