Android?attr / colorAccent在API 21上使用不正确的颜色

时间:2018-05-14 06:20:23

标签: android android-layout

我的布局中有两个按钮,如下所示:

enter image description here

左边的那个有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显示正确的颜色?

1 个答案:

答案 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;
}