Edytuj (22.06.2016):
Biblioteka Appcompat zaczęła obsługiwać przyciski materiałów po opublikowaniu oryginalnej odpowiedzi. W tym poście możesz zobaczyć najłatwiejszą implementację podniesionych i płaskich przycisków.
Oryginalna odpowiedź:
Ponieważ ten AppCompat nie obsługuje jeszcze przycisku, możesz używać xml jako tła. Aby to zrobić, rzuciłem okiem na kod źródłowy Androida i znalazłem powiązane pliki do stylizacji przycisków materiałów.
1 - Spójrz na oryginalną implementację przycisku materiału ze źródła.
Spójrz na plik btn_default_material.xml w kodzie źródłowym Androida .
Możesz skopiować plik do folderu Drawable-v21 projektów. Ale nie dotykaj tutaj koloru attr. Plik, który musisz zmienić, to drugi plik.
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 - Uzyskaj kształt oryginalnego przycisku materiału
Jak sobie uświadamiacie, w tym rysunku można znaleźć kształt, który można znaleźć w tym pliku kodu źródłowego .
<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 - Uzyskanie wymiarów przycisku materiału
W tym pliku znajdują się pewne wymiary z pliku , który można znaleźć tutaj . Możesz skopiować cały plik i umieścić go w folderze wartości . Jest to ważne, aby zastosować ten sam rozmiar (który jest używany w materiałowych przyciskach) do wszystkich przycisków
4 - Utwórz kolejny plik do rysowania dla starych wersji
W starszych wersjach powinieneś mieć inną rysownię o tej samej nazwie. Bezpośrednio umieszczam elementy w linii zamiast odwoływania się. Możesz odwoływać się do nich. Ale znowu najważniejszą rzeczą są oryginalne wymiary przycisku materiału.
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>
Wynik
Twój przycisk będzie miał efekt falowania na urządzeniach Lollipop. Stare wersje będą miały dokładnie ten sam przycisk, z wyjątkiem efektu marszczenia. Ale ponieważ udostępniasz drawable dla różnych stanów, będą one również reagować na zdarzenia dotykowe (jak w starym stylu).