Bearbeiten (22.06.2016):
Die Appcompat- Bibliothek begann, Materialschaltflächen zu unterstützen, nachdem ich die ursprüngliche Antwort veröffentlicht hatte. In diesem Beitrag Sie die einfachste Implementierung von erhöhten und flachen Schaltflächen.
Ursprüngliche Antwort:
Da AppCompat die Schaltfläche noch nicht unterstützt, können Sie XML als Hintergrund verwenden. Dazu habe ich mir den Quellcode von Android angesehen und die zugehörigen Dateien für das Styling von Materialschaltflächen gefunden.
1 - Sehen Sie sich die ursprüngliche Implementierung der Materialschaltfläche aus der Quelle an.
Schauen Sie sich die btn_default_material.xml im Android-Quellcode an .
Sie können die Datei in den Ordner drawable-v21 Ihres Projekts kopieren. Berühren Sie hier jedoch nicht den Farbattr. Die Datei, die Sie ändern müssen, ist die zweite Datei.
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 - Erhalten Sie die Form des Originalmaterialknopfes
Wie Sie feststellen, wird in diesem Zeichenbild eine Form verwendet, die Sie in dieser Datei des Quellcodes finden .
<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 - Abmessungen der Materialschaltfläche abrufen
Und in dieser Datei gibt es einige Dimensionen, die aus der Datei verwendet werden , die Sie hier finden . Sie können die gesamte Datei kopieren und in Ihren Werteordner ablegen. Dies ist wichtig, um allen Schaltflächen dieselbe Größe (die in Materialschaltflächen verwendet wird) zuzuweisen
4 - Erstellen Sie eine weitere zeichnbare Datei für alte Versionen
Für ältere Versionen sollten Sie eine andere Zeichnung mit demselben Namen haben. Ich setze die Elemente direkt inline, anstatt sie zu referenzieren. Vielleicht möchten Sie sie referenzieren. Aber auch hier sind die ursprünglichen Abmessungen des Materialknopfs das Wichtigste.
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>
Ergebnis
Ihre Taste hat auf Lollipop-Geräten einen Welleneffekt. Die alten Versionen haben bis auf den Ripple-Effekt genau die gleiche Schaltfläche. Da Sie jedoch Drawables für verschiedene Zustände bereitstellen, reagieren diese auch auf Berührungsereignisse (wie bisher).