Edit (22.06.2016):
Pustaka Appcompat mulai mendukung tombol materi setelah saya memposting respons asli. Dalam posting ini Anda dapat melihat implementasi termudah dari tombol datar dan datar.
Jawaban asli:
Karena AppCompat itu tidak mendukung tombol, Anda dapat menggunakan xml sebagai latar belakang. Untuk melakukan itu saya telah melihat kode sumber Android dan menemukan file terkait untuk tombol bahan styling.
1 - Lihatlah implementasi asli tombol material dari sumber.
Lihatlah btn_default_material.xml pada kode sumber android .
Anda dapat menyalin file ke folder drawable-v21 proyek Anda. Tapi jangan sentuh attr warna di sini. File yang perlu Anda ubah adalah file kedua.
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 - Dapatkan bentuk tombol bahan asli
Ketika Anda menyadari ada bentuk yang digunakan di dalam drawable ini yang dapat Anda temukan di file kode sumber ini .
<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 - Mendapatkan dimensi tombol material
Dan dalam file ini Anda ada beberapa dimensi yang digunakan dari file yang dapat Anda temukan di sini . Anda dapat menyalin seluruh file dan memasukkan nilai Anda folder . Ini penting untuk menerapkan ukuran yang sama (yang digunakan pada tombol material) untuk semua tombol
4 - Buat file lain yang dapat ditarik untuk versi lama
Untuk versi yang lebih lama Anda harus memiliki drawable lain dengan nama yang sama. Saya langsung meletakkan item dalam inline alih-alih referensi. Anda mungkin ingin referensi mereka. Tapi sekali lagi, yang paling penting adalah dimensi asli dari tombol material.
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>
Hasil
Tombol Anda akan memiliki efek riak pada perangkat Lollipop. Versi lama akan memiliki tombol yang persis sama kecuali efek riak. Tetapi karena Anda menyediakan drawable untuk status yang berbeda, mereka juga akan merespons acara sentuh (seperti cara lama).