我有一个自定义列表视图,我希望列表的背景为白色,所以我做了类似这样的工作,效果很好。
listView = (ListView) this.findViewById(R.id.listview);
listView.setBackgroundColor(Color.WHITE);
问题是当您滚动列表时,所有列表项的背景变为黑色,这看起来很糟糕。
我在列表视图中尝试将背景颜色设置为白色。当我给视图充气时,我也尝试将背景颜色设置为白色:
view.setBackgroundColor(Color.WHITE);
这两个都解决了滚动背景颜色的问题,但现在该项似乎不是可点击的,即使它是。我的意思是onClick仍然可以正常工作,但背景不会闪现橙色,让用户知道他点击了它。
如何在列表视图中显示白色背景,在滚动时保持白色,并且正常列表是否为活动橙色点击背景?
谢谢!
答案 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