ListView小知識整理:滑動背景、Item間隙等
在Android中,ListView是最常用的一個控件,在做UI設(shè)計的時候,很多人希望能夠改變一下它的背景,使他能夠符合整體的UI設(shè)計,改變背景很簡單只需要準(zhǔn)備一張圖片,然后指定屬性 android:background="@drawable/bg",不過不要高興地太早,當(dāng)你這么做以后,發(fā)現(xiàn)背景是變了,但是當(dāng)你拖動,或者點擊 list空白位置的時候發(fā)現(xiàn)ListItem都變成黑色的了,破壞了整體效果,如下圖所示:
這是為什么呢?
這個要從Listview的效果說起,默認(rèn)的ListItem背景是透明的,而ListView的背景是固定不變的,所以在滾動條滾動的過程中如果實時地 去將當(dāng)前每個Item的顯示內(nèi)容跟背景進(jìn)行混合運算,所以android系統(tǒng)為了優(yōu)化這個過程用,就使用了一個叫做 android:cacheColorHint的屬性,在黑色主題下默認(rèn)的顏色值是#191919,所以就出現(xiàn)了剛才的畫面,有一半是黑色的.
那怎么辦呢?
如果你只是換背景的顏色的話,可以直接指定android:cacheColorHint為你所要的顏色,如果你是用圖片做背景的話,那也只要將 android:cacheColorHint指定為透明(#00000000)就可以了,當(dāng)然為了美化是要犧牲一些效率的。***就不回出現(xiàn)上面所說的你 不想要的結(jié)果了!
自定義ListView行間的分割線
在Android平臺中系統(tǒng)控件提供了靈活的自定義選項,所有基于ListView或者說AbsListView實現(xiàn)的widget控件均可以通過下面的方法設(shè)置行間距的分割線,分割線可以自定義顏色、或圖片。
在ListView中我們使用屬性 android:divider="#FF0000" 定義分隔符為紅色,當(dāng)然這里值可以指向一個drawable圖片對象,如果使用了圖片可能高度大于系統(tǒng)默認(rèn)的像素,可以自己設(shè)置高度比如6個像素 android:dividerHeight="6px" ,當(dāng)然在Java中ListView也有相關(guān)方法可以設(shè)置。
點擊Item時無背景顏色變化
在xml文件中的ListView控件中加入如下屬性:
- android:listSelector="@drawable/timer_list_selector"
在drawable中定義timer_list_selector的屬性值
timer_list_selector.xml中定義如下:
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:drawable="@android :color/transparent" />
- </selector>
在values文件夾下的colors.xml中定義transparent如下:
- <color name="transparent">#50000000</color>
設(shè)置Item之間無間隙
在xml文件中ListView控件中加入如下屬性:
- android:divider="#00000000"
或者在javaCode中如下定義:
- listView.setDividerHeight(0);
自定義的BaseAdapter中調(diào)用notifyDataSetChanged()方法會重新調(diào)用BaseAdapter的getView()方法。
listview中在設(shè)置了背景之后,會有些問題:
1.、listview在拖動的時候背景圖片消失變成黑色背景。等到拖動完畢我們自己的背景圖片才顯示出來。
2 、listview的上邊和下邊有黑色的陰影。
3、lsitview的每一項之間需要設(shè)置一個圖片做為間隔。
針對以上問題 在listview的xml文件中設(shè)置一下語句。
問題1 有如下代碼結(jié)解決 android:scrollingCache="false"
問題2 用如下代碼解決:android:fadingEdge="none"
問題3 用如下代碼解決: android:divider="@drawable/list_driver" 其中 @drawable/list_driver 是一個圖片資源
總體如下:
- <ListView
- android:id="@+id/myListView01"
- android:layout_width="fill_parent"
- android:layout_height="287dip"
- android:fadingEdge="none"
- android:scrollingCache="false"
- android:divider="@drawable/list_driver"
- android:background="@drawable/list">
- </ListView>