我的布局中有两个按钮,如下所示:
左边的那个有android:backgroundTint="?attr/colorAccent"
并正确显示紫色。右侧的按钮有android:backgroundTint="@color/button_color"
,其中@color/button_color
在XML中定义如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@color/gray"/>
<item android:color="?attr/colorAccent" />
</selector>
在Android版本&gt; 22上,两个按钮都正确显示为紫色,但仅限于API 21和22(我未在下面测试,因为我的应用仅支持&gt; = 21),使用{{1显示(看似随机)红色。
在android:backgroundTint="@color/button_color"
?
?attr/colorAccent
显示正确的颜色?
答案 0 :(得分:0)
我仍然不确定导致此问题的原因,但我通过在此代码中应用ColorStateList
来解决这个问题:
button.setBackgroundTintList(
new ColorStateList(
new int[][]{
new int[]{-android.R.attr.state_enabled}, //Disabled
new int[]{} //Default
},
new int[]{
disabledColor,
defaultColor
}
)
);
要将defaultColor
设置为等于重音颜色属性,请使用以下方法:
public static int getAccentColor(final Context context) {
final TypedValue typedValue = new TypedValue();
final TypedArray a = context.obtainStyledAttributes(typedValue.data, new int[]{android.R.attr.colorAccent});
final int color = a.getColor(0, 0);
a.recycle();
return color;
}