listview中的item滚动变黑的原因和解决办法

1在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性android:background="@drawable/bg",不过不要高兴地太早,当你这么做以后,发现背景是变了,但是当你拖动,或者点击list空白位置的时候发现ListItem都变成黑色的了,破坏了整体效果。 

       这是什么原因导致的呢?起初我以为是因为我把背景设置成了白色,然后产生色差导致的,后来查阅资料发现,其实这个要从Listview的效果说起,默认的ListItem背景是透明的,而ListView的背景是固定不变的,所以在滚动条滚动的过程中如果实时地去将当前每个Item的显示内容跟背景进行混合运算,所以android系统为了优化这个过程用,就使用了一个叫做android:cacheColorHint的属性,在黑色主题下默认的颜色值是#191919,所以就出现了刚才的画面,有一半是黑色的,那怎么办呢? 
       如果你只是换背景的颜色的话,可以直接指定android:cacheColorHint为你所要的颜色,如果你是用图片做背景的话,那也只要将android:cacheColorHint指定为透明(#00000000)就可以了,当然为了美化是要牺牲一些效率的。

 

 
在代码中设置:
listView.setCacheColorHint(Color.TRANSPARENT);
 
列出xml中listview用设置供大家参考:
<ListView android:id="@+id/listview" android:layout_width="fill_parent"

android:fadingEdge="none" android:scrollingCache="false"

android:layout_height="fill_parent" android:divider="@null"

android:cacheColorHint="#00000000" android:fadeScrollbars="true" />

其中常用的属性值都有:

fadingEdge 上下边距阴影 

scrollingCache 滚动缓存 

divider分割线 

fadeScrollbars滚动条自动隐藏

 

2item分割线粗细不同的问题。

 

        我们在listview中展示每一个item的时候,有时会遇到每一个列表项之间的分割线粗细不同的原因,明明默认,没有设置任何分割线,可是怎么会一条细一条粗,一条细一条粗的问题呢?

在xml的listview布局中:android:dividerHeight="1px"(默认设置)  但有的行一个像素有的行两个像素

 

代码中去掉各item之间的黑色线条方法

listView.setDivider(null) ;

解决办法一:

将其设为:
android:divier="#ffdddddd"    灰色(或其他颜色)
android:dividerHeight="2px"   统一为2像素

 

解决办法二:

在manifes配置文件中加入<uses-sdk android:targetSdkVersion="">的配置,
如:<uses-sdk android:targetSdkVersion="4" />

 

当发现解决办法二的时候,我明白了,或许是模拟器或安卓的版本的问题,于是我把应用程序(2.1)拷贝到真机(2.3.3)安装上,还是默认的listview,不存在线条粗细不一的问题。于是,我就新创建了一个2.3的模拟器,调试安装上应用程序,显示效果和手机一样,所以到现在得出了结论,是2.1版本模拟器显示问题。

 

(2.1模拟器显示的问题)

(2.3的显示效果,线条默认成了灰色,但是仔细看还是有像素粗细的问题,继续研究,如有结论,继续补充上来)。

posted @ 2013-02-01 12:59  GreyWolf  阅读(232)  评论(0编辑  收藏  举报