Background ListView becomes black when scrolling
我创建了一个特定的List,它存在于以下元素之外,用于创建一个可滚动列表,每行包含左侧的Image和右侧的一些文本:
首先是"根"布局:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#C8C8C8" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"/> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:drawSelectorOnTop="false" android:divider="#C8C8C8" android:background="#C8C8C8"/> </LinearLayout> |
然后在ListView中我放置以下"行"项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:background="@drawable/bg_row" > <ImageView android:layout_width="wrap_content" android:paddingLeft="10px" android:paddingRight="15px" android:paddingTop="5px" android:paddingBottom="5px" android:layout_height="wrap_content" android:src="@drawable/bg_image" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="5px" android:paddingBottom="5px" android:textSize="16sp" android:textColor="#000000" android:layout_gravity="center" android:maxHeight="50px"/> </LinearLayout> |
只要屏幕静态显示(如没有移动)就会正确显示,但是当我开始滚动列表时,行项目的背景(代码中显示的"图标")将是 正确显示,但"根"布局的背景将变为完全黑色...当滚动停止时,背景将在大多数情况下恢复其颜色......
在我测试的时候,我还在相同背景的root元素中添加了一个
知道为什么会这样,以及如何解决这个问题?
在
1 | android:cacheColorHint="#00000000" // setting transparent color |
有关详细信息,请查看此博客
在布局文件中使用此行非常简单:
1 | android:scrollingCache="false" |
像这样:
1 2 3 4 5 | <ListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollingCache="false" /> |
你可以像这样使用:
1 2 | list.setCacheColorHint(Color.TRANSPARENT); list.requestFocus(0); |
1 2 3 4 5 6 7 | android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:drawSelectorOnTop="false" android:divider="#C8C8C8" android:background="#C8C8C8" android:cacheColorHint="#00000000"/> |
我们有很多选择来解决这个问题,你可以通过编程来设置背景透明
1 | yourlistview.setCacheColorHint(Color.TRANSPARENT); |
或通过xml
1 | android:cacheColorHint="@android:color/transparent" |
我在
1 2 3 4 5 6 7 8 9 | @Override public View getView(int position, View convertView, ViewGroup parent) { Holder holder; convertView = null; // convert view should be null if (convertView == null) { holder = new Holder(); convertView = inflater1.inflate(R.layout.listview_draftreport_item, null); } } |
在你的xml中使用
1 | android:cacheColorHint="@android:color/transparent" |
这个问题有很多答案,但今天我意识到这个问题仍然缺少一个重要的信息。
这个问题有两种可能的解决方案,两种方法都有效,但每种方法都应该用于不同的情况。
方法
当
1 | <item name="android:cacheColorHint">@android:color/transparent</item> |
当
1 | <item name="android:scrollingCache">false</item> |
注意
当
注意注意:
以下对我有用:
1 | myListView.setScrollingCacheEnabled(false); |
1 | android:cacheColorHint="@android:color/transparent" |
要么
不要设置