以正常状态以编程方式更改选择器的颜色

时间:2014-12-18 17:42:34

标签: android

我有以下选择器。它实际上是选择器内部的形状。我这样做是因为显然Android 5不支持带角的形状,除非它在选择器内。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
               android:shape="rectangle">
            <corners
                android:radius="@dimen/a_menu_corner_radius"/>
        </shape>
    </item>
</selector>

无论如何......事情是我想以编程方式改变形状的颜色。我已经创建了这个util方法:

/**
 * @param view
 * @param colorValue a color value, not a resource ID !!!
 * @throws java.lang.ClassCastException in case the drawable is not a selector
 */
public static void setColorToSelectorNormalState(View view, int colorValue) throws ClassCastException {
    if (view != null) {
        Drawable background = view.getBackground();
        if (!(background instanceof StateListDrawable)) {
            throw new ClassCastException("The drawable must inherit the StateListDrawable class. (the drawable set needs to be a selector !)");
        }

        ((StateListDrawable) background).addState(new int[]{android.R.attr./*?????????*/}, new ColorDrawable(colorValue));
    }
}

......但我无法弄清楚要把什么作为国家的参数。 (参见/ ???? / part)。 ting只有一个状态,即“正常”状态,但“正常”没有状态属性,或者是否存在?

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我认为您需要的是StateSet.WILD_CARD

 ((StateListDrawable) background).addState(StateSet.WILD_CARD, new ColorDrawable(colorValue));

您可以找到文档here