0

我想将选择器设置为 ListView 的 colorCacheHint:

<ListView
    android:id="@+id/listview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:cacheColorHint="@color/selector_background" />

但是将其引用为缓存颜色提示无效。

是否不可能根据 ListView 的状态更改 cacheColorHint ?还是我错过了什么?

4

2 回答 2

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)
于 2013-01-17T21:37:18.263 回答
0

我最终没有仔细阅读源代码,但我凭经验同意@LuxuryMode 确实不可能将缓存颜色提示设置为选择器。

我最终将这个添加到refreshDrawableState我的自定义视图中。诀窍是结合getColorStateListgetColorForState允许您从选择器中应用正确的颜色。

    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
    }
于 2013-02-05T22:28:01.483 回答