1. 程式人生 > >Android常見控制元件使用經驗之——ListView

Android常見控制元件使用經驗之——ListView

屬性

首先stackFromBottom屬性,這隻該屬性之後你做好的列表就會顯示你列表的最下面,值為true和false

android:stackFromBottom="true"  

第二transciptMode屬性,需要用ListView或者其它顯示大量Items的控制元件實時跟蹤或者檢視資訊,並且希望最新的條目可以自動滾動到可視範圍內。通過設定的控制元件transcriptMode屬性可以將Android平臺的控制元件(支援ScrollBar)自動滑動到最底部。
android:transcriptMode="alwaysScroll" 

第三cacheColorHint屬性,很多人希望能夠改變一下它的背景,使他能夠符合整體的UI設計,改變背景背很簡單隻需要準備一張圖片然後指定屬性 

android:background="@drawable/bg",不過不要高興地太早,當你這麼做以後,發現背景是變了,但是當你拖動,或者點選list空白位置的時候發現ListItem都變成黑色的了,破壞了整體效果。

如果你只是換背景的顏色的話,可以直接指定android:cacheColorHint為你所要的顏色,如果你是用圖片做背景的話,那也只要將android:cacheColorHint指定為透明(#00000000)就可以了

第四divider屬性,該屬性作用是每一項之間需要設定一個圖片做為間隔,或是去掉item之間的分割線

android:divider="@drawable/list_driver"

  其中  @drawable/list_driver 是一個圖片資源,如果不想顯示分割線則只要設定為android:divider="@drawable/@null" 就可以了

第五fadingEdge屬性,上邊和下邊有黑色的陰影

android:fadingEdge="none" 設定後沒有陰影了~

第六scrollbars屬性,作用是隱藏listView的滾動條,

android:scrollbars="none"與setVerticalScrollBarEnabled(true);的效果是一樣的,不活動的時候隱藏,活動的時候也隱藏

第七fadeScrollbars屬性,android:fadeScrollbars="true"  配置ListView佈局的時候,設定這個屬性為true就可以實現滾動條的自動隱藏和顯示。

第八fastScrollEnabled屬性 ,

很多開發者不知道ListView列表控制元件的快速滾動滑塊是如何啟用的,這裡Android開發網告訴大家,輔助滾動滑塊只需要一行程式碼就可以搞定,如果你使用XML佈局只需要在ListView節點中加入  android:fastScrollEnabled="true" 這個屬性即可,而對於Java程式碼可以通過myListView.setFastScrollEnabled(true); 來控制啟用,引數false為隱藏。 還有一點就是當你的滾動內容較小,不到當前ListView的3個螢幕高度時則不會出現這個快速滾動滑塊,同時該方法仍然是AbsListView的基礎方法,可以在ListView或GridView等子類中使用快速滾動輔助。

第九drawSelectorOnTop屬性

When set to true, the selector will be drawn over the selecteditem. Otherwise the selector is drawn behind the selected item. Thedefault value is false.

android:drawSelectorOnTop="true" 點選某一條記錄,顏色會顯示在最上面,記錄上的文字被遮住,所以點選文字不放,文字就看不到

android:drawSelectorOnTop="false"點選某條記錄不放,顏色會在記錄的後面,成為背景色,但是記錄內容的文字是可見的

特性

滾動監聽

當為listview設定點選監聽和滾動監聽後,初始進入介面時會觸發兩次onScroll(),當點選事件觸發時,會依次執行onScroll()→onClick()→onScroll()。

新增按鈕後自身無響應

Button獲取了焦點, 導致ListView沒有了焦點, 所以響應不了。

我們只要在Button上加上兩句Xml的屬性即可。

Android:focusable="false"
Android:focusableInTouchMode="false"

item內button的響應事件

viewHolder.btn_Track.setOnClickListener(new btnOnClick(position));

private class btnOnClick implements OnClickListener{ 
int position ; 
public btnOnClick(int pos)
{
position=pos;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==R.id.btn_Track)
{
Toast.makeText(context, listMaps.get(position).get("orderId"),Toast.LENGTH_LONG).show();
}
} 
}

ListView巢狀ListView的內部item響應

在主Listview Item XML中最頂層這裡我用的是LinearLayout 設定android:descendantFocusability="blocksDescendants"

並設定主Listview android:focusable="false"

//listview事件

viewHolder.listView.setOnItemClickListener(new listv_Goods());

private class listv_Goods implements OnItemClickListener{

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
Map<String, String> item = (Map<String, String>) parent.getItemAtPosition(position);
Toast.makeText(context, item.get("name"),Toast.LENGTH_LONG).show();
} 
}

 

自定義快速拖動條

其實要實現上圖的在ListView右側的拖動條很簡單,只需在xml檔案中定義ListView時加入一個屬性就可以了。

<ListView android:id="@+id/listView"

android:layout_width="fill_parent" 
android:layout_height="fill_parent"

android:fastScrollEnabled="true"
android:focusable="true" />

但是有時候會發現設定屬性無效,滾動ListView並未出現滑塊。原因是該屬性生效有最小記錄限制。當ListView記錄能夠在4屏以內顯示(也就是說滾動4頁)就不會出現滑塊。可能是api設計者認為這麼少的記錄不需要快速滾動。

 另外:

在ListView中新增屬性:
android:scrollbarTrackVertical="@drawable/scrollbar_vertical_track" android:scrollbarThumbVertical="@drawable/scrollbar_vertical_thumb"
scrollbar_vertical_track,crollbar_vertical_thumb自定義的xml檔案,放在Drawable中,track是指長條,thumb是指短條,然後再xml中定義短條和長條的樣式