我使用的是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:background时,你正在用空白颜色替换按钮的大部分样式和外观。
更新:在23.0.0版本的AppCompat发布中,有一个新的Widget.AppCompat.Button.Colored样式,它使用你的主题的colorButtonNormal来禁用颜色,colorAccent来启用颜色。
这可以让你直接应用到你的按钮通过
<Button
...
style="@style/Widget.AppCompat.Button.Colored" />
如果你需要一个自定义的colorButtonNormal或colorAccent,你可以使用一个ThemeOverlay,正如在这个专业技巧和android:主题上的按钮。
以前的回答
你可以在你的v21目录中使用一个可绘制的后台,比如:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item android:drawable="?attr/colorPrimary"/>
</ripple>
这将确保你的背景颜色是?attr/colorPrimary,并使用默认的?attr/colorControlHighlight(如果你愿意,你也可以在你的主题中设置)拥有默认的波纹动画。
注意:你必须为v21以下的版本创建一个自定义选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/primaryPressed" android:state_pressed="true"/>
<item android:drawable="@color/primaryFocused" android:state_focused="true"/>
<item android:drawable="@color/primary"/>
</selector>
假设有一些您想要的默认、按下和聚焦状态的颜色。就我个人而言,我在被选中的过程中截取了一个波纹的屏幕截图,并从中提取了主/聚焦状态。
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"/>