Android常見控制元件使用經驗之——ListView
屬性
首先是stackFromBottom屬性,這隻該屬性之後你做好的列表就會顯示你列表的最下面,值為true和false
android:stackFromBottom="true"
第二是transciptMode屬性,需要用ListView或者其它顯示大量Items的控制元件實時跟蹤或者檢視資訊,並且希望最新的條目可以自動滾動到可視範圍內。通過設定的控制元件transcriptMode屬性可以將Android平臺的控制元件(支援ScrollBar)自動滑動到最底部。
android:transcriptMode="alwaysScroll"
第三cacheColorHint屬性,很多人希望能夠改變一下它的背景,使他能夠符合整體的UI設計,改變背景背很簡單隻需要準備一張圖片然後指定屬性
如果你只是換背景的顏色的話,可以直接指定android:cacheColorHint為你所要的顏色,如果你是用圖片做背景的話,那也只要將android:cacheColorHint指定為透明(#00000000)就可以了
第四divider屬性,該屬性作用是每一項之間需要設定一個圖片做為間隔,或是去掉item之間的分割線
android:divider="@drawable/list_driver"
第五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中定義短條和長條的樣式