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>
1. 背景色: listView設定背景色android:background="@drawable/bg",拖動或者點選list空白位置的時候發現ListItem都變成黑色。 因為預設的ListItem背景是透明的,而ListView的背景是固定不變的,所以在滾動條滾動的過程中如果實時地去將當前每個Item的顯示內容跟背景進行混合運算,所以android系統為了優化這個過程用,就使用了一個叫做android:cacheColorHint的屬性,在黑色主題下預設的顏色值是#191919,所以就出現了剛才的畫面,有一半是黑色的。
如果你只是換背景的顏色的話,可以直接指定android:cacheColorHint為你所要的顏色;如果你是用圖片做背景的話,那也只要將android:cacheColorHint指定為透明(#00000000)就可以了,當然為了美化是要犧牲一些效率的。
2. android:fadingEdge="none" 去掉上邊和下邊黑色的陰影
3. android:divider="@drawable/list_driver" 其中 @drawable/list_driver 是一個圖片資源lsitview的每一項之間需要設定一個圖片做為間隔
設定Item之間無間隙
android:divider="#00000000" 或者在javaCode中如下定義:listView.setDividerHeight(0);
4. android:listSelector="@color/pink" listView item 選中時的顏色。預設為橙黃底色。
5. android:divider="@drawable/list_driver" 設定分割線的圖片資源,如果則只要設定為
android:divider="@drawable/@null" 不想顯示分割線
6. android:scrollbars="none" setVerticalScrollBarEnabled(true); 隱藏listView的滾動條
7. android:fadeScrollbars="true" 設定為true就可以實現滾動條的自動隱藏和顯示
8. android:transcriptMode="alwaysScroll" 用ListView或者其它顯示大量Items的控制元件實時跟蹤或者檢視資訊,希望最新的條目可以自動滾動到可視範圍內。通過設定的控制元件transcriptMode屬性可以將Android平臺的控制元件(支援ScrollBar)自動滑動到最底部。
android:fastScrollEnabled="false"
android:fastScrollEnabled = "true" 加快滑動速度
android:drawSelectorOnTop="false"
android:scrollingCache="false" ??????????????
android:drawSelectorOnTop="true" 點選某一條記錄,顏色會顯示在最上面,記錄上的文字被遮住,所以點選文字不放,文字就看不到
android:drawSelectorOnTop="false" 點選某條記錄不放,顏色會在記錄的後面,成為背景色,但是記錄內容的文字是可見的
滾動條始終顯示:
android:scrollbarFadeDuration="0"
android:fadeScrollbars="false"
滾動條樣式自定義:
android:scrollbarThumbVertical="@drawable/new_iv_listview_thumb"
有時候覺得系統提供的ListView元件樣式不能滿足我們的要求,此時我們需要自己寫ListView元件樣式
1.元件外部樣式
在drawable下新建view_style.xml
內容:<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ff0000ff"/>
<stroke android:width="1dp" android:color="#000000" />
<gradient
android:startColor="#FFFFFF"
android:endColor="#FFFFFF"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<corners android:radius="10dp" />
</shape>
此時通過ListView元件的android:background="@drawable/view_style"就可使用自寫的元件樣式了
上面的樣式只寫了元件外部樣式,元件內部樣式如分割線可以通過下面方法設定
2.元件內部樣式
設定android:footerDividersEnabled表示是否顯示分割線,預設為true,不顯示設為false即可。
改變ListView的分割線顏色和寬度,需要在佈局中定義android:divider和android:dividerHeight屬性。
例:<ListView
android:id="@+id/local_groups_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@color/divider_color"
android:dividerHeight="1px" />
(list_divider.xml)
<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="50dp"
android:insetRight="50dp" >
<shape>
<solid android:color="@color/orange" />
<corners android:radius="2.0dip" />
</shape>
</inset>
或者
<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="15dp"
android:insetRight="15dp" >
<shape
android:shape="line" >
<stroke
android:dashGap="1dp"
android:dashWidth="1.5dp"
android:width="1dp"
android:color="#FF404040" />
<size android:height="3dp" />
</shape>
</inset>
and in your list view add like this...
<ListView
android:dividerHeight="2dp"
android:divider="@drawable/list_divider"
...
/>
相關文章
- android 用ListView實現表格樣式AndroidView
- Android ListView的滾動條樣式AndroidView
- android之豎直滾動控制元件-ListViewAndroid控制元件View
- Android快速開發框架,基礎庫,樣式庫,元件化,元件整合Android框架元件化
- 自定義元件-樣式元件
- Android中ListView控制元件onItemClick事件中獲取listView傳遞的資料AndroidView控制元件事件
- Android ListViewAndroidView
- Android動態修改ListView中指定Item的元件屬性AndroidView元件
- vue父元件中修改子元件樣式Vue元件
- Android之ListViewAndroidView
- Android的ListViewAndroidView
- 字母索引查詢ListView元件索引View元件
- Vue 元件間的樣式汙染Vue元件
- android中的ListViewAndroidView
- android listview and scrollviewAndroidView
- android:ListView bbs DemoAndroidView
- android-UI元件例項大全(七)------Adapter類One之ListViewAndroidUI元件APTView
- vue裡面父元件如何修改子元件樣式Vue元件
- ListView控制元件 1130View控制元件
- React 元件庫 CSS 樣式方案分析React元件CSS
- React修改Antd元件樣式的方法React元件
- vue 元件中新增樣式不生效Vue元件
- Android UI設計(7):ListView 控制元件與 Adapter 介面卡AndroidUIView控制元件APT
- Android裡透明的ListViewAndroidView
- android listview checkedTextView 的使用AndroidTextView
- Android樣式和主題Android
- android自定義button樣式Android
- 【BootStrap】圖片樣式、輔助類樣式和CSS元件 -附原始碼bootCSS元件原始碼
- Flutter 滾動控制元件篇-->ListViewFlutter控制元件View
- Flutter滾動型容器元件 - ListView篇Flutter元件View
- 如何覆蓋元件的自帶樣式元件
- 元件庫通用樣式設計總結元件
- 小程式 | 如何在頁面修改元件樣式?渲染出來的元件列表,如何個性化樣式?元件
- android:ListView 的簡單用法AndroidView
- android:定製 ListView 的介面AndroidView
- Android listview與adapter用法AndroidViewAPT
- Android ListView(Selector 顏色)AndroidView
- Android入門之ListView (二)AndroidView