我有以下选择器。它实际上是选择器内部的形状。我这样做是因为显然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只有一个状态,即“正常”状态,但“正常”没有状态属性,或者是否存在?
有什么想法吗?
答案 0 :(得分:1)
我认为您需要的是StateSet.WILD_CARD
((StateListDrawable) background).addState(StateSet.WILD_CARD, new ColorDrawable(colorValue));
您可以找到文档here