我有一个列表活动,当我点击一个选项卡时填充,问题是列表颜色在滚动时变黑,即使我没有设置任何属性发生这样的..任何建议,以避免这个问题? 谢谢,
答案 0 :(得分:21)
将其添加到xml文件中的listView
:
android:cacheColorHint="#00000000"
或Java代码:
getListView().setCacheColorHint(0);
答案 1 :(得分:7)
我建议你阅读这篇文章:ListView Backgrounds: An Optimization,在定制LitsView外观之前必须阅读这篇文章。
取自上述文件:
如前所述,默认情况下,ListView具有透明/半透明背景,因此Android UI工具包中的所有默认小部件都是如此。这意味着当ListView重绘其子项时,它必须将子项与窗口的背景混合。再一次,这需要从内存中进行昂贵的回读,这在滚动过程中尤为痛苦,或者每秒进行数十次绘制时会出现这种情况。
为了提高滚动操作期间的绘图性能,Android框架重用了缓存颜色提示。设置此提示后,框架会在填充了提示值的位图中复制列表的每个子项(假设另一个优化,称为滚动缓存,未关闭)。然后ListView直接在屏幕上显示这些位图,因为已知这些位图是不透明的,所以不需要混合。此外,由于默认缓存颜色提示为#191919,因此在滚动期间每个项目背后会出现深色背景。
要解决此问题,您所要做的就是禁用缓存颜色提示优化,如果使用非纯色背景,或将提示设置为适当的纯色值。您可以使用android:cacheColorHint属性从代码(请参阅 setCacheColorHint(int)
)或最好从XML执行此操作。要停用优化,只需使用透明色 #00000000
。以下屏幕截图显示了在XML布局文件中设置 android:cacheColorHint="#00000000"
的列表
答案 2 :(得分:0)
您是否在使用
的活动或应用中设置了主题<item name="android:windowBackground">@null</item>
当你有一个填充父视图的视图(通常是surfaceView)时,这是一个加速2D绘图的技巧。我看到这导致listViews和scrollViews的奇怪背景渲染。
如果您使用null windowbackground hack,您可以尝试为列表视图设置背景颜色,我敢打赌滚动问题会减少。
答案 3 :(得分:0)
我知道很晚才回答这个问题,但对于那些面临这个问题的人来说:
以上技术可能有效,但实际应该做的是添加
android:scrollingCache="false"
列表布局中的。喜欢这个
<ListView
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/myList"
android:scrollingCache="false"
/>
你可以从这里scrollingCache?
得到这个原因谢谢