我使用的是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"
/>


当前回答

<android.support.v7.widget.AppCompatButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:backgroundTint="#fff"
    android:textColor="#000"
    android:text="test"/>

Use

xmlns:app="http://schemas.android.com/apk/res-auto"

颜色也会在棒棒糖前被接受

其他回答

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

你的布局应该是这样的

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

使用backgroundTint代替background

我今天在使用v22库时遇到了这个问题。

假设您正在使用样式,您可以设置colorButtonNormal属性,按钮将默认使用该颜色。

<style name="AppTheme" parent="BaseTheme">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/primaryColor</item>
    <item name="colorPrimaryDark">@color/primaryColorDark</item>
    <item name="colorAccent">@color/accentColor</item>
    <item name="colorButtonNormal">@color/primaryColor</item>
</style>

除此之外,你还可以为按钮创建一个样式,然后使用每个按钮,如果你需要各种颜色(还没有测试,只是猜测)。

记住在v21样式的项目名称之前添加android:。

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"/>

还有另一个简单的解决方案,为“平面”按钮提供自定义背景,同时保持它们的“材质”效果。

将你的按钮放在ViewGroup中,并在那里设置所需的背景 设置当前主题的selectableItemBackground作为按钮的背景(API >=11)

例如:

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

可以用于平面按钮,它在API >=11上工作,你将在>=21设备上获得涟漪效应,保持常规按钮在pre-21上,直到AppCompat更新以支持涟漪。

你也可以只对>=21的按钮使用selectableItemBackgroundBorderless。