天天看點

android中listview的一些樣式設定

在Android中,ListView是最常用的一個控件,在做UI設計的時候,很多人希望能夠改變一下它的背景,使他能夠符合整體的UI設計,改變背景背很簡單隻需要準備一張圖檔然後指定屬性 android:background="@drawable/bg",不過不要高興地太早,當你這麼做以後,發現背景是變了,但是當你拖動,或者點選list空白位置的時候發現ListItem都變成黑色的了,破壞了整體效果

這是為什麼呢?

這個要從Listview的效果說起,預設的ListItem背景是透明的,而ListView的背景是固定不變的,是以在滾動條滾動的過程中如果實時地去将目前每個Item的顯示内容跟背景進行混合運算,是以android系統為了優化這個過程用,就使用了一個叫做android:cacheColorHint的屬性,在黑色主題下預設的顔色值是#191919,是以就出現了剛才的畫面,有一半是黑色的.

那怎麼辦呢?

如果你隻是換背景的顔色的話,可以直接指定android:cacheColorHint為你所要的顔色,如果你是用圖檔做背景的話,那也隻要将android:cacheColorHint指定為透明(#00000000)就可以了,當然為了美化是要犧牲一些效率的。最後就不回出現上面所說的你不想要的結果了!

自定義ListView行間的分割線

在Android平台中系統控件提供了靈活的自定義選項,所有基于ListView或者說AbsListView實作的widget控件均可以通過下面的方法設定行間距的分割線,分割線可以自定義顔色、或圖檔。

  在ListView中我們使用屬性   android:divider="#FF0000" 定義分隔符為紅色,當然這裡值可以指向一個drawable圖檔對象,如果使用了圖檔可能高度大于系統預設的像素,可以自己設定高度比如6個像素   android:dividerHeight="6px" ,Android開發網提示當然在Java中ListView也有相關方法可以設定。

1)點選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>

2)設定Item之間無間隙

在xml檔案中ListView控件中加入如下屬性:

android:divider="#00000000"

或者在javaCode中如下定義:

listView.setDividerHeight(0);

3)自定義的BaseAdapter中調用notifyDataSetChanged()方法會重新調用BaseAdapter的getView()方法。

屬性名稱 描述
android:choiceMode

規定此ListView所使用的選擇模式。預設狀态下,list沒有選擇模式。

屬性值必須設定為下列常量之一: none,值為0,表示無選擇模式;

singleChoice,值為1,表示最多可以有一項被選中;

multipleChoice,值為2,表示可以多項被選中。

可參看全局屬性資源符号choiceMode。

android:divider

規定List項目之間用某個圖形或顔色來分隔。可以用"@[+] [package:]type:name"或者"?[package:][type:]name"(主題屬性)的形式來指向某個已有資源;也可以用"#rgb","#argb","#rrggbb"或者"#aarrggbb"的格式來表示某個顔色。

可參看全局屬性資源符号divider。

android:dividerHeight

分隔符的高度。若沒有指明高度,則用此分隔符固有的高度。必須為帶機關的浮點數,如"14.5sp"。可用的機關如px(pixel像素),dp(density-independent pixels 與密集度無關的像素), sp(scaled pixels based on preferred font size 基于字型大小的固定比例的像素), in (inches英寸), mm (millimeters毫米)。

可以用"@[package:]type:name

"或者"?[package:][type:]name"(主題屬性)的格式來指向某個包含此類型值的資源。

可參看全局屬性資源符号dividerHeight。

android:entries

引用一個将使用在此ListView裡的數組。若數組是固定的,使用此屬性将比在程式中寫入更為簡單。

必須以"@[+][package:]type:name"或者 "?[package:][type:]name"的形式來指向某個資源。

可參看全局屬性資源符号entries。

android:footerDividersEnabled

設成flase時,此ListView将不會在頁腳視圖前畫分隔符。此屬性預設值為true。

屬性值必須設定為true或false。

可以用"@[package:]type:name

"或者"?[package:][type:]name"(主題屬性)的格式來指向某個包含此類型值的資源。

可參看全局屬性資源符号footerDividersEnabled。

android:headerDividersEnabled

設成flase時,此ListView将不會在頁眉視圖後畫分隔符。此屬性預設值為true。

屬性值必須設定為true或false。

可以用"@[package:]type:name

"或者"?[package:][type:]name"(主題屬性)的格式來指向某個包含此類型值的資源。

可參看全局屬性資源符号headerDividersEnabled。

用心的朋友應該會發現,listview中在設定了背景之後。會有些問題。

1.、listview在拖動的時候背景圖檔消失變成黑色背景。等到拖動完畢我們自己的背景圖檔才顯示出來。

2 、listview的上邊和下邊有黑色的陰影。

3、lsitview的每一項之間需要設定一個圖檔做為間隔。

針對以上問題 在listview的xml檔案中設定一下語句。

問題1 有如下代碼結解決 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:divider="@drawable/list_driver"

  android:scrollingCache="false"

  android:background="@drawable/list">

  </ListView>

繼續閱讀