本文來(lái)自http://blog.csdn.net/hellogv/
?????? GridView跟ListView都是比較常用的多控件布局,而GridView更是實(shí)現(xiàn)九宮圖的首選!本文就是介紹如何使用GridView實(shí)現(xiàn)九宮圖。GridView的用法很多,網(wǎng)上介紹最多的方法就是自己實(shí)現(xiàn)一個(gè)ImageAdapter繼承BaseAdapter,再供GridView使用,類(lèi)似這種的方法本文不再重復(fù),本文介紹的GridView用法跟前文ListView的極其類(lèi)似。。。。也算是我偷懶一下,嘻嘻嘻嘻。。。。
?????? 先來(lái)貼出本文代碼運(yùn)行的結(jié)果:
?
本文需要添加/修改3個(gè)文件:main.xml、night_item.xml、JAVA源代碼。
main.xml源代碼如下,本身是個(gè)GirdView,用于裝載Item:
- < GridView ? xmlns:android = "http://schemas.android.com/apk/res/android" ???
- ???? android:id = "@+id/gridview" ??
- ???? android:layout_width = "fill_parent" ???
- ???? android:layout_height = "fill_parent" ??
- ???? android:numColumns = "auto_fit" ??
- ???? android:verticalSpacing = "10dp" ??
- ???? android:horizontalSpacing = "10dp" ??
- ???? android:columnWidth = "90dp" ??
- ???? android:stretchMode = "columnWidth" ??
- ???? android:gravity = "center" ??
- /> ??
?
介紹一下里面的某些屬性:
android:numColumns="auto_fit" ,GridView的列數(shù)設(shè)置為自動(dòng)
android:columnWidth="90dp",每列的寬度,也就是Item的寬度
android:stretchMode="columnWidth",縮放與列寬大小同步
android:verticalSpacing="10dp",兩行之間的邊距,如:行一(NO.0~NO.2)與行二(NO.3~NO.5)間距為10dp
android:horizontalSpacing="10dp",兩列之間的邊距。
?
接下來(lái)介紹 night_item.xml,這個(gè)XML跟前面ListView的ImageItem.xml很類(lèi)似:
- <? xml ? version = "1.0" ? encoding = "utf-8" ?> ??
- < RelativeLayout ???
- ????????? xmlns:android = "http://schemas.android.com/apk/res/android" ???
- ????????? android:layout_height = "wrap_content" ???
- ????????? android:paddingBottom = "4dip" ? android:layout_width = "fill_parent" > ??
- ????????? < ImageView ???
- ??????????????? android:layout_height = "wrap_content" ???
- ??????????????? android:id = "@+id/ItemImage" ???
- ??????????????? android:layout_width = "wrap_content" ???
- ??????????????? android:layout_centerHorizontal = "true" > ???
- ????????? </ ImageView > ??
- ????????? < TextView ???
- ??????????????? android:layout_width = "wrap_content" ???
- ??????????????? android:layout_below = "@+id/ItemImage" ???
- ??????????????? android:layout_height = "wrap_content" ???
- ??????????????? android:text = "TextView01" ???
- ??????????????? android:layout_centerHorizontal = "true" ???
- ??????????????? android:id = "@+id/ItemText" > ??
- ????????? </ TextView > ??
- </ RelativeLayout > ??
?
?
最后就是JAVA的源代碼了,也跟前面的ListView的JAVA源代碼很類(lèi)似,不過(guò)多了“選中”的事件處理:
- ?? public ? void ?onCreate(Bundle?savedInstanceState)?{??
- ?????? super .onCreate(savedInstanceState);??
- ??????setContentView(R.layout.main);??
- ??????GridView?gridview?=?(GridView)?findViewById(R.id.gridview);??
- ????????
- ?????? //生成動(dòng)態(tài)數(shù)組,并且轉(zhuǎn)入數(shù)據(jù) ??
- ??????ArrayList<HashMap<String,?Object>>?lstImageItem?=? new ?ArrayList<HashMap<String,?Object>>();??
- ?????? for ( int ?i= 0 ;i< 10 ;i++)??
- ??????{??
- ????????HashMap<String,?Object>?map?=? new ?HashMap<String,?Object>();??
- ????????map.put( "ItemImage" ,?R.drawable.icon); //添加圖像資源的ID ??
- ????map.put( "ItemText" ,? "NO." +String.valueOf(i)); //按序號(hào)做ItemText ??
- ????????lstImageItem.add(map);??
- ??????}??
- ?????? //生成適配器的ImageItem?<====>?動(dòng)態(tài)數(shù)組的元素,兩者一一對(duì)應(yīng) ??
- ??????SimpleAdapter?saImageItems?=? new ?SimpleAdapter( this ,? //沒(méi)什么解釋 ??
- ????????????????????????????????????????????????lstImageItem, //數(shù)據(jù)來(lái)源? ??
- ????????????????????????????????????????????????R.layout.night_item, //night_item的XML實(shí)現(xiàn) ??
- ??????????????????????????????????????????????????
- ???????????????????????????????????????????????? //動(dòng)態(tài)數(shù)組與ImageItem對(duì)應(yīng)的子項(xiàng)???????? ??
- ???????????????????????????????????????????????? new ?String[]?{ "ItemImage" , "ItemText" },???
- ??????????????????????????????????????????????????
- ???????????????????????????????????????????????? //ImageItem的XML文件里面的一個(gè)ImageView,兩個(gè)TextView?ID ??
- ???????????????????????????????????????????????? new ? int []?{R.id.ItemImage,R.id.ItemText});??
- ?????? //添加并且顯示 ??
- ??????gridview.setAdapter(saImageItems);??
- ?????? //添加消息處理 ??
- ??????gridview.setOnItemClickListener( new ?ItemClickListener());??
- ??}??
- ????
- ?? //當(dāng)AdapterView被單擊(觸摸屏或者鍵盤(pán)),則返回的Item單擊事件 ??
- ?? class ??ItemClickListener? implements ?OnItemClickListener??
- ??{??
- public ? void ?onItemClick(AdapterView<?>?arg0, //The?AdapterView?where?the?click?happened? ??
- ??????????????????????????????????View?arg1, //The?view?within?the?AdapterView?that?was?clicked ??
- ?????????????????????????????????? int ?arg2, //The?position?of?the?view?in?the?adapter ??
- ?????????????????????????????????? long ?arg3 //The?row?id?of?the?item?that?was?clicked ??
- ??????????????????????????????????)?{??
- ???? //在本例中arg2=arg3 ??
- ????HashMap<String,?Object>?item=(HashMap<String,?Object>)?arg0.getItemAtPosition(arg2);??
- ???? //顯示所選Item的ItemText ??
- ????setTitle((String)item.get( "ItemText" ));??
- }??
- ??????
- ??}??
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
