滚动ListView会将所有内容从白色更改为黑色

时间:2010-06-10 05:53:09

标签: android

我有一个自定义列表视图,我希望列表的背景为白色,所以我做了类似这样的工作,效果很好。

listView = (ListView) this.findViewById(R.id.listview);
listView.setBackgroundColor(Color.WHITE);

问题是当您滚动列表时,所有列表项的背景变为黑色,这看起来很糟糕。

我在列表视图中尝试将背景颜色设置为白色。当我给视图充气时,我也尝试将背景颜色设置为白色:

view.setBackgroundColor(Color.WHITE);

这两个都解决了滚动背景颜色的问题,但现在该项似乎不是可点击的,即使它是。我的意思是onClick仍然可以正常工作,但背景不会闪现橙色,让用户知道他点击了它。

如何在列表视图中显示白色背景,在滚动时保持白色,并且正常列表是否为活动橙色点击背景?

谢谢!

5 个答案:

答案 0 :(得分:118)

解决方案非常简单,您还需要将缓存颜色提示设置为白色:setCacheColorHint(Color.WHITE)。您无需更改列表项的背景颜色。

答案 1 :(得分:7)

ListView lv = getListView();
setCacheColorHint(0);

将缓存颜色提示设置为零。

答案 2 :(得分:6)

解决方案非常简单,您还需要在xml中将缓存颜色提示设置为黑色。

android:cacheColorHint="#000000"

答案 3 :(得分:3)

Android尝试通过缓存布局信息来提高ListView滚动的性能。如果你有长滚动数据列表,你还应该在Activity的AXML定义中的ListView声明上设置android:cacheColorHint属性(与自定义行布局的背景颜色值相同)。当用户滚动具有自定义行背景颜色的列表时,未包括此提示可能导致“闪烁”。 所以给listitem的背景和android:cacheColorHint提供相同的颜色。你可以参考下面的代码。

在我的适配器布局中,我给出了

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ADAPTER_CONTAINER_PRIMARY"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FAFAEE"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:gravity="center">
     .....

在列表视图中

<ListView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/LIST_GRID_LIST_INSTANCES"
            android:focusableInTouchMode="true"     
            android:smoothScrollbar="true"
            android:divider="@drawable/Gray"
            android:dividerHeight="0.05dp"
            android:cacheColorHint="#FAFAEE"
            android:background="@drawable/round"/>

答案 4 :(得分:1)

如果您的ListView被绘制在更复杂的背景上 - 比如位图或渐变 - 那么您可能需要完全禁用滚动缓存。我最终在android:scrollingCache="false"上设置ListView来解决此问题。

http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:scrollingCache