我使用的是Android v21支持库。

我已经创建了一个自定义背景色的按钮。当我使用背景色时,材质设计效果如波纹,显示消失了(除了点击时的抬高)。

 <Button
 style="?android:attr/buttonStyleSmall"
 android:background="?attr/colorPrimary"
 android:textColor="@color/white"
 android:textAllCaps="true"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="Button1"
 />

下面是一个正常的按钮,效果很好。

<Button
 style="?android:attr/buttonStyleSmall"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:textAllCaps="true"
 android:text="Button1"
/>


当前回答

appcompat-v7的V22.1版本引入了一些新的可能性。现在可以将特定的主题仅分配给一个视图。

不赞成使用应用程序:主题样式工具栏。您现在可以使用 android:所有API级别7及以上设备的工具栏主题 android: API级别11及以上的所有小部件的主题支持 设备。

因此,我们不再在全局主题中设置所需的颜色,而是创建一个新的主题并仅将其分配给按钮

例子:

<style name="MyColorButton" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorButtonNormal">@color/myColor</item>
</style>

并使用这种风格作为主题的按钮

<Button
 style="?android:attr/buttonStyleSmall"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="Button1"
 android:theme="@style/MyColorButton"/>

其他回答

下面是一种简单且向后兼容的方法,可以通过自定义背景向凸起的按钮传递涟漪效应。

你的布局应该是这样的

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/my_custom_background"
    android:foreground="?android:attr/selectableItemBackground"/>

如果您可以使用第三方库,请查看traex/RippleEffect。它允许您仅用几行代码就可以向任何视图添加涟漪效应。你只需要在你的xml布局文件中,包装你想用com. anddexert .library. rippleview容器产生涟漪效应的元素。

作为额外的奖励,它需要Min SDK 9,这样你就可以在不同的操作系统版本之间保持设计一致性。

下面是一个摘自图书馆GitHub回购的例子:

<com.andexert.library.RippleView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:rv_centered="true">

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@android:drawable/ic_menu_edit"
        android:background="@android:color/holo_blue_dark"/> 

</com.andexert.library.RippleView>

你可以通过在RippleView元素中添加这个属性来改变波纹颜色:app:rv_color="@color/ my_fany_ripple_color "

appcompat-v7的V22.1版本引入了一些新的可能性。现在可以将特定的主题仅分配给一个视图。

不赞成使用应用程序:主题样式工具栏。您现在可以使用 android:所有API级别7及以上设备的工具栏主题 android: API级别11及以上的所有小部件的主题支持 设备。

因此,我们不再在全局主题中设置所需的颜色,而是创建一个新的主题并仅将其分配给按钮

例子:

<style name="MyColorButton" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorButtonNormal">@color/myColor</item>
</style>

并使用这种风格作为主题的按钮

<Button
 style="?android:attr/buttonStyleSmall"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="Button1"
 android:theme="@style/MyColorButton"/>

如果你对ImageButton感兴趣,你可以尝试这个简单的事情:

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@android:drawable/ic_button"
    android:background="?attr/selectableItemBackgroundBorderless"
/>

@ianhanniballake的回答是绝对正确和简单的。但我花了几天时间才明白。对于那些不理解他的回答的人,这里有更详细的实现

<Button
        android:id="@+id/btn"
        style="@style/MaterialButton"
        ... />


<style name="MaterialButton" parent="Widget.AppCompat.Button.Colored">
    <item name="android:theme">@style/Theme.MaterialButton</item>
   ...
</style>


<style name="Theme.MaterialButton" parent="YourTheme">
    <item name="colorAccent">@color/yourAccentColor</item>
    <item name="colorButtonNormal">@color/yourButtonNormalColor</item>
</style>

= = = = = =

<Button
        android:id="@+id/btn"
        style="@style/Widget.AppCompat.Button.Colored"
        android:theme="@style/Theme.MaterialButton" />

<style name="Theme.MaterialButton" parent="YourTheme">
    <item name="colorAccent">@color/yourAccentColor</item>
    <item name="colorButtonNormal">@color/yourButtonNormalColor</item>
</style>