Modifica (22.06.2016):
La libreria di Appcompat ha iniziato a supportare i pulsanti dei materiali dopo aver pubblicato la risposta originale. In questo post puoi vedere l'implementazione più semplice dei pulsanti in rilievo e piatti.
Risposta originale:
Dal momento che AppCompat non supporta ancora il pulsante, puoi usare xml come sfondo. Per farlo ho dato un'occhiata al codice sorgente di Android e ho trovato i file correlati per i pulsanti del materiale di styling.
1 - Guarda l'implementazione originale del pulsante materiale dalla fonte.
Dai un'occhiata a btn_default_material.xml sul codice sorgente Android .
È possibile copiare il file nella cartella drawable-v21 dei progetti. Ma non toccare il colore attr qui. Il file che devi modificare è il secondo file.
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 - Ottieni la forma del pulsante del materiale originale
Quando ti rendi conto c'è una forma usata all'interno di questo disegno che puoi trovare in questo file del codice sorgente .
<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 - Ottenere le dimensioni del pulsante materiale
E in questo file ci sono alcune dimensioni utilizzate dal file che puoi trovare qui . È possibile copiare l'intero file e inserirlo nella cartella dei valori . Questo è importante per applicare la stessa dimensione (utilizzata nei pulsanti dei materiali) a tutti i pulsanti
4 - Crea un altro file disegnabile per le vecchie versioni
Per le versioni precedenti dovresti avere un altro disegno con lo stesso nome. Sto inserendo direttamente gli articoli in linea anziché fare riferimento. Potresti voler fare riferimento a loro. Ma ancora una volta, la cosa più importante sono le dimensioni originali del pulsante materiale.
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>
Risultato
Il tuo pulsante avrà un effetto a catena sui dispositivi Lollipop. Le vecchie versioni avranno esattamente lo stesso pulsante tranne l'effetto a catena. Ma dal momento che fornisci disegnabili per diversi stati, risponderanno anche agli eventi di tocco (come alla vecchia maniera).