android絢麗的ListView表格效果的實現
絢麗的ListView表格效果的實現
簡介:
在業務系統中經常會用到表格控制元件去顯示資料,但Android自帶的ListView控制元件本身無法實現一種較為美觀的表格效果,但我們可以通過其他的方式讓ListView表格變得更漂亮。讓我們一起來探討下。
我們先來看看以下兩幅圖:
圖(一)
圖(二)
很明顯,圖一比較簡潔,而圖二看上去明亮耀眼。從使用者體驗的角度來講,圖二介面效果明顯比圖一好,那邊框是怎麼加進去的呢?
ListView的adapter我們使用了SimapleAdapter,從上圖可以看出ListView的每行包含了許多項,ListView的資料內容我們可以通過構建List以及設定每一項為一個map實現:
- ArrayList<HashMap<String, String>> mylist = newArrayList<HashMap<String, String>>();
- HashMap<String, String> map1 = newHashMap<String, String>();
- map1.put("Num" , "220503432" );
- map1.put("Receive" , "張三" );
- map1.put("Payway"
,
"貨到付款"
);
- map1.put("TotalPrice" , "$98.30" );
- map1.put("State" , "已發貨" );
- map1.put("Date" , "2010-09-23" );
- mylist.add(map1);
ListView相當於一個顯示資料的容器,裡面每一行都是一個訂單資訊,這些行資訊我們需要在另外一個XML檔案裡面定義,具體的表格邊框也是在這
個XML檔案裡面實現。下面我們先介ListView中如何實現表格的豎線邊框。在Android裡面,View是android線條的基
礎,ListView裡面的邊框就是用View實現的,ListView裡面的內容我們可以用一個xml檔案裝載ListView的內容,而
TableLayout也是不存在邊框的,那麼下面我們用View在xml檔案裡面畫邊框,以下是實現ListView邊框的核心程式碼:
- <TableLayoutandroid:id= "@+id/a07_ls_rlo"
- android:layout_width="wrap_content"
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="wrap_content" >
- <TableRow>
- <View style="@style/view2" />
- <TextView
- style="@style/txtNolinkleft"
- android:id="@+id/a07_ls_txtYF" />
- <View style="@style/view2" />
- <TextView
- style="@style/txtNolinkright"
- android:layout_width="80dip"
- android:gravity="center"
- android:id="@+id/a07_ls_txtXXSR" />
- <View style="@style/view2" />
- <TextView
- style="@style/txtNolinkright"
- android:layout_width="100dip"
- android:gravity="center"
- android:id="@+id/a07_ls_txtYNSE" />
- <View style="@style/view2" />
- <TextView
- style="@style/txtNolinkright"
- android:layout_width="80dip"
- android:id="@+id/a07_ls_txtSNSE" />
- <View style="@style/view2" />
- <TextView
- style="@style/txtNolinkleft"
- android:layout_width="92dip"
- android:gravity="center"
- android:id="@+id/a07_ls_txtSBRQ" />
- <View style="@style/view2" />
- <TextView
- style="@style/txtNolinkleft"
- android:layout_width="92dip"
- android:id="@+id/a07_ls_txtJNRQ" />
- <View style="@style/view2" />
- <TextView
- style="@style/txtNolinkleft"
- android:layout_width="80dip"
- android:gravity="center"
- android:id="@+id/a07_ls_txtSPDM" />
- <View style="@style/view2" />
- </TableRow>
- </TableLayout>
資料來源以及ListView每行的內容都定義好後,就可以使用SimapleAdapter將ListView、資料內容、每行的定義關聯起來,程式碼如下:
- 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};
- list.setAdapter(mSchedule);
可能有人看到上面程式碼中的SpecialAdapter會奇怪這是什麼類?不是用SimpleAdapter麼?下面會講解到SpecialAdapter是做什麼用的。
在Android佈局中,基本的5大布局方式是沒有邊框的,我們通過上面View的方式實現了邊框效果,而通常在做一些業務系統的時候客戶除了要求在
資料列表頁面中能以表格的形式呈現資料外還要求能有選中行高亮、單雙行顏色交替等比較絢麗的效果,當然這對於使用者體驗來說是很好的。下面將介紹這兩個效果
的實現方式。
我們先看一下選中行高亮的效果如圖(三)所示:
圖(三)
高亮效果通過設定背景圖來實現,實現的程式碼如下:
- ListView list=(ListView) this .findViewById(R.id.listview);
- Drawabledrawable = getResources().getDrawable(R.drawable.listview_hoverbg);
- list.setSelector(drawable);
從圖(三)可看出該列表實現了單雙行顏色交替效果,其實現就和前面提到的SpecialAdapter有關,SpecialAdapter繼承了
SimpleAdapter類,SpecialAdapter重寫了父類的getView方法,通過對引數position的判斷區分單雙行,通過對列表
單元格每個view的背景色設定從而達到設定整行背景色的效果,程式碼如下:
- privateint[] colors = new int [] { 0x30FF0000 , 0x300000FF };
- @Override
- public View getView( int position, View convertView, ViewGroup parent) {
- View view = super .getView(position, convertView, parent);
- intcolorPos = position % colors.length;
- if (colorPos== 1 )
- view.setBackgroundColor(Color.argb(250 , 255 , 255 , 255 ));
- else
- view.setBackgroundColor(Color.argb(250 , 224 , 243 , 250 ));
- return view;
- }
SimpleAdapter是一個十分有用的類,不僅僅是資料來源介面卡,在裡面可以取得或者設定每一行的許多資訊,如可以獲取到每一行每個單元格的控制元件以及樣式等等,在開發絢麗的ListView表格方面是非常有用的和實用的一個類,具有很強的靈活性與擴充套件性。
以上是本人對ListView在表格表現方面的一些遇見,如有不正確的地方還望各位多指教。