我正在使用 Android v21 支持库。
我创建了一个具有自定义背景颜色的按钮。当我使用背景颜色时,波纹、显示等 Material 设计效果消失了(点击时的高度除外)。
<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,您正在用空白颜色替换按钮的大部分样式和外观。
android:background
更新: 从AppCompat的23.0.0 版本开始,有一种新样式将您的主题用于禁用颜色和启用颜色。Widget.AppCompat.Button.ColoredcolorButtonNormal``colorAccent
Widget.AppCompat.Button.Colored
colorButtonNormal``colorAccent
这允许您直接通过
<Button ... style="@style/Widget.AppCompat.Button.Colored" />
如果您需要自定义colorButtonNormalor colorAccent,您可以按照本专业提示和按钮上的ThemeOverlay说明使用 a 。android:theme
colorButtonNormal
colorAccent
ThemeOverlay
android:theme
上一个答案
您可以在 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(如果您愿意,您也可以在主题中设置)。
?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>
假设你有一些你想要的默认、按下和聚焦状态的颜色。就个人而言,我在被选中的过程中截取了一个涟漪的屏幕截图,并将主要/聚焦状态从中拉出来。