我想将一个选择器设置为ListView的colorCacheHint:
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="@color/selector_background" />
但是引用它作为缓存颜色提示没有任何效果。
根据ListView的状态,是否无法更改cacheColorHint?或者我错过了什么?
答案 0 :(得分:0)
我不相信你可以有一个用于缓存颜色提示的选择器。这究竟是什么 不同的国家是?对于单个项目具有状态是有意义的,例如压缩,聚焦等,但为什么这对ListView本身有意义?
修改强>
据推测,您希望基于某些自己的(域)逻辑切换事物的外观,而不是让UI更改取决于定义选择器时使用的预定义状态。换句话说,如果您使用选择器作为缓存颜色提示,您希望使用哪个状态? android:state_pressed,android:state_focused,android:state_hovered,android:state_selected等?我认为您需要根据您的逻辑直接设置缓存颜色提示:
int cacheColorRes = myState == foo? R.drawable.something : R.drawable.somethingElse;
mView.setCacheColorHint(cacheColorRes)
答案 1 :(得分:0)
我最终没有通过源代码,但我在经验上同意@LuxuryMode,它确实无法将缓存颜色提示设置为选择器。
我最终将此添加到我的自定义视图的refreshDrawableState
。诀窍是getColorStateList
和getColorForState
的组合,允许您从选择器应用正确的颜色。
ColorStateList listBackground = view.getContext().getResources().getColorStateList(R.color.list_background);
int color = listBackground.getColorForState(view.getDrawableState(),listBackground.getDefaultColor());
try {
view.setCacheColorHint(color);
} catch (IndexOutOfBoundsException e) {
//Early versions of Android have a bug in setCacheColorHint
// http://code.google.com/p/android/issues/detail?id=12840
}