1. 程式人生 > >android絢麗的ListView表格效果的實現

android絢麗的ListView表格效果的實現

絢麗的ListView表格效果的實現

  簡介:
  在業務系統中經常會用到表格控制元件去顯示資料,但Android自帶的ListView控制元件本身無法實現一種較為美觀的表格效果,但我們可以通過其他的方式讓ListView表格變得更漂亮。讓我們一起來探討下。

  我們先來看看以下兩幅圖:

  圖(一)

  圖(二)

  很明顯,圖一比較簡潔,而圖二看上去明亮耀眼。從使用者體驗的角度來講,圖二介面效果明顯比圖一好,那邊框是怎麼加進去的呢?
  ListView的adapter我們使用了SimapleAdapter,從上圖可以看出ListView的每行包含了許多項,ListView的資料內容我們可以通過構建List以及設定每一項為一個map實現:

  1. ArrayList<HashMap<String, String>> mylist = newArrayList<HashMap<String, String>>();  
  2.   HashMap<String, String> map1 = newHashMap<String, String>();     
  3.   map1.put("Num" "220503432" );  
  4.   map1.put("Receive" "張三" );  
  5.   map1.put("Payway" "貨到付款" );     
  6.   map1.put("TotalPrice" "$98.30" );  
  7.   map1.put("State" "已發貨" );  
  8.   map1.put("Date" "2010-09-23" );  
  9.   mylist.add(map1);  


  ListView相當於一個顯示資料的容器,裡面每一行都是一個訂單資訊,這些行資訊我們需要在另外一個XML檔案裡面定義,具體的表格邊框也是在這 個XML檔案裡面實現。下面我們先介ListView中如何實現表格的豎線邊框。在Android裡面,View是android線條的基 礎,ListView裡面的邊框就是用View實現的,ListView裡面的內容我們可以用一個xml檔案裝載ListView的內容,而 TableLayout也是不存在邊框的,那麼下面我們用View在xml檔案裡面畫邊框,以下是實現ListView邊框的核心程式碼:

  1. <TableLayoutandroid:id= "@+id/a07_ls_rlo"
  2.    android:layout_width="wrap_content"
  3.   xmlns:android="http://schemas.android.com/apk/res/android"
  4.    android:layout_height="wrap_content" >  
  5.   <TableRow>  
  6.   <View style="@style/view2"  />  
  7.   <TextView  
  8.   style="@style/txtNolinkleft"
  9.   android:id="@+id/a07_ls_txtYF" />  
  10.   <View style="@style/view2"  />  
  11.   <TextView  
  12.   style="@style/txtNolinkright"
  13.   android:layout_width="80dip"
  14.   android:gravity="center"
  15.   android:id="@+id/a07_ls_txtXXSR" />  
  16.   <View style="@style/view2"  />  
  17.   <TextView  
  18.   style="@style/txtNolinkright"
  19.   android:layout_width="100dip"
  20.   android:gravity="center"
  21.   android:id="@+id/a07_ls_txtYNSE" />  
  22.   <View style="@style/view2"  />  
  23.   <TextView  
  24.   style="@style/txtNolinkright"
  25.   android:layout_width="80dip"
  26.   android:id="@+id/a07_ls_txtSNSE" />  
  27.   <View style="@style/view2"  />  
  28.   <TextView  
  29.   style="@style/txtNolinkleft"
  30.   android:layout_width="92dip"
  31.   android:gravity="center"
  32.   android:id="@+id/a07_ls_txtSBRQ" />  
  33.   <View style="@style/view2"  />  
  34.   <TextView  
  35.   style="@style/txtNolinkleft"
  36.   android:layout_width="92dip"
  37.   android:id="@+id/a07_ls_txtJNRQ" />  
  38.   <View style="@style/view2"  />  
  39.   <TextView  
  40.   style="@style/txtNolinkleft"
  41.   android:layout_width="80dip"
  42.   android:gravity="center"
  43.   android:id="@+id/a07_ls_txtSPDM" />  
  44.   <View style="@style/view2"  />  
  45.   </TableRow>  
  46.   </TableLayout>  


  資料來源以及ListView每行的內容都定義好後,就可以使用SimapleAdapter將ListView、資料內容、每行的定義關聯起來,程式碼如下:

  1. SpecialAdapter mSchedule =  new  SpecialAdapter( this ,mylist,R.layout.listview, new  String[]{ "Num" , "Receive" , "Payway" , "TotalPrice" , "State" , "Date" },newint[]{R.id.a07_ls_txtNum,R.id.a07_ls_txtReceive,R.id.a07_ls_txtPayway,R.id.a07_ls_txtTotalPrice,R.id.a07_ls_txtState,R.id.a07_ls_txtDate};  
  2.   list.setAdapter(mSchedule);  


  可能有人看到上面程式碼中的SpecialAdapter會奇怪這是什麼類?不是用SimpleAdapter麼?下面會講解到SpecialAdapter是做什麼用的。
  在Android佈局中,基本的5大布局方式是沒有邊框的,我們通過上面View的方式實現了邊框效果,而通常在做一些業務系統的時候客戶除了要求在 資料列表頁面中能以表格的形式呈現資料外還要求能有選中行高亮、單雙行顏色交替等比較絢麗的效果,當然這對於使用者體驗來說是很好的。下面將介紹這兩個效果 的實現方式。


   我們先看一下選中行高亮的效果如圖(三)所示:

  圖(三)


  高亮效果通過設定背景圖來實現,實現的程式碼如下:

  1. ListView list=(ListView) this .findViewById(R.id.listview);  
  2.    Drawabledrawable = getResources().getDrawable(R.drawable.listview_hoverbg);  
  3.   list.setSelector(drawable);  


  從圖(三)可看出該列表實現了單雙行顏色交替效果,其實現就和前面提到的SpecialAdapter有關,SpecialAdapter繼承了 SimpleAdapter類,SpecialAdapter重寫了父類的getView方法,通過對引數position的判斷區分單雙行,通過對列表 單元格每個view的背景色設定從而達到設定整行背景色的效果,程式碼如下:

  1. privateint[] colors =  new int [] {  0x30FF0000 0x300000FF  };  
  2.   @Override
  3.   public  View getView( int  position, View convertView, ViewGroup parent) {     
  4.   View view = super .getView(position, convertView, parent);   
  5.   intcolorPos = position % colors.length;     
  6.   if (colorPos== 1 )  
  7.    view.setBackgroundColor(Color.argb(250 255 255 255 ));   
  8.   else
  9.    view.setBackgroundColor(Color.argb(250 224 243 250 ));   
  10.   return  view;    
  11.   }  


  SimpleAdapter是一個十分有用的類,不僅僅是資料來源介面卡,在裡面可以取得或者設定每一行的許多資訊,如可以獲取到每一行每個單元格的控制元件以及樣式等等,在開發絢麗的ListView表格方面是非常有用的和實用的一個類,具有很強的靈活性與擴充套件性。
  以上是本人對ListView在表格表現方面的一些遇見,如有不正確的地方還望各位多指教。