Editar (22.06.2016):
La biblioteca de Appcompat comenzó a admitir botones de material después de que publiqué la respuesta original. En esta publicación puede ver la implementación más fácil de botones planos y elevados.
Respuesta original
Dado que AppCompat aún no admite el botón, puede usar xml como fondo. Para hacerlo, eché un vistazo al código fuente de Android y encontré los archivos relacionados para los botones de material de estilo.
1 - Mira la implementación original del botón de material desde la fuente.
Eche un vistazo a btn_default_material.xml en el código fuente de Android .
Puede copiar el archivo en la carpeta drawable-v21 de su proyecto. Pero no toques el color attr aquí. El archivo que necesita cambiar es el segundo archivo.
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 - Obtenga la forma del botón de material original
Como se da cuenta, hay una forma utilizada dentro de este dibujo que puede encontrar en este archivo del código fuente .
<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 - Obtener dimensiones del botón de material
Y en este archivo hay algunas dimensiones utilizadas del archivo que puede encontrar aquí . Puede copiar todo el archivo y ponerlo en su carpeta de valores . Esto es importante para aplicar el mismo tamaño (que se usa en los botones de material) a todos los botones
4 - Crear otro archivo dibujable para versiones anteriores
Para versiones anteriores, debe tener otro dibujable con el mismo nombre. Estoy poniendo directamente los elementos en línea en lugar de hacer referencia. Es posible que desee hacer referencia a ellos. Pero, de nuevo, lo más importante son las dimensiones originales del botón de 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>
Resultado
Su botón tendrá un efecto dominó en los dispositivos Lollipop. Las versiones anteriores tendrán exactamente el mismo botón, excepto el efecto dominó. Pero dado que proporciona elementos extraíbles para diferentes estados, también responderán a eventos táctiles (como en la forma anterior).