欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

一起学Android之GridView

程序员文章站 2022-11-24 19:10:38
本文以一个简单的小例子,简述Android开发中GridView的常见应用,仅供学习分享使用。 ......

本文以一个简单的小例子,简述android开发中gridview的常见应用,仅供学习分享使用。

概述

giridview是一个表格显示资源的控件,可以在两个可滚动的方向上显示。列表项的资源会通过listadapter自动添加到布局控件中girdview上。

如下图所示:

一起学Android之GridView

 

数据绑定步骤

如下图所示:

一起学Android之GridView

 涉及知识点

  • android:numcolumns="auto_fit"  设置gridview中的列数,可以是数字,auto_fit表示系统自动根据屏幕的大小进行适应性显示。
  • android:verticalspacing="10dp” 用于设置行与行之间的垂直间隔
  • android:horizontalspacing="10dp" 用于设置列与列之间的水平间隔
  • android:stretchmode="columnwidth" 设置列中元素的拉伸模式
  • setonitemclicklistener 设置列元素的监听事件

示例效果图

如下图所示:

一起学Android之GridView

核心代码

gridview如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <relativelayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     tools:context="com.hex.demogridview.mainactivity">
 8     <gridview
 9         android:id="@+id/gv_info"
10         android:columnwidth="90dp"
11         android:verticalspacing="10dp"
12         android:horizontalspacing="10dp"
13         android:numcolumns="auto_fit"
14         android:stretchmode="columnwidth"
15         android:layout_width="match_parent"
16         android:layout_height="match_parent"></gridview>
17 </relativelayout>

列表项代码(图片和文本)

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
 3               android:layout_width="match_parent"
 4               android:layout_height="match_parent"
 5               android:orientation="vertical">
 6     <imageview
 7         android:id="@+id/img_info"
 8         android:src="@drawable/a011"
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content"/>
11     <textview
12         android:id="@+id/tv_info"
13         android:text="abc"
14         android:textsize="20sp"
15         android:textalignment="center"
16         android:textcolor="@color/coloraccent"
17         android:layout_width="match_parent"
18         android:layout_height="wrap_content"/>
19 </linearlayout>

后台代码(adapter类)

 1 class  myadapter extends baseadapter {
 2         private context mcontext;
 3 
 4         public myadapter(context context) {
 5             this.mcontext = context;
 6         }
 7 
 8         @override
 9         public int getcount() {
10             return mlist != null ? mlist.size() : 0;
11         }
12 
13         @override
14         public object getitem(int position) {
15             return mlist.get(position);
16         }
17 
18         @override
19         public long getitemid(int position) {
20             return position;
21         }
22 
23         @override
24         public view getview(int position, view convertview, viewgroup parent) {
25             viewholder viewholder;
26             if (convertview == null) {
27                 // if it's not recycled, initialize some attributes
28                 layoutinflater inflater = (layoutinflater) getsystemservice(context.layout_inflater_service); //getlayoutinflater();
29                 convertview = inflater.inflate(r.layout.grid_item,null);
30                 viewholder=new viewholder();
31                 viewholder.img = (imageview) convertview.findviewbyid(r.id.img_info);
32                 viewholder.tv = (textview) convertview.findviewbyid(r.id.tv_info);
33 
34                 convertview.settag(viewholder);
35             } else {
36                 viewholder = (viewholder) convertview.gettag();
37             }
38             viewholder.img.setimageresource((int)mlist.get(position).get("img"));
39             viewholder.tv.settext((string) mlist.get(position).get("txt"));
40             return convertview;
41         }
42     }

后台代码(activity)

 1 public class mainactivity extends appcompatactivity {
 2     private  int[] imgs;
 3     private list<map<string,object>> mlist;
 4    private  gridview gvinfo;
 5     @override
 6     protected void oncreate(bundle savedinstancestate) {
 7         super.oncreate(savedinstancestate);
 8         setcontentview(r.layout.activity_main);
 9         gvinfo= (gridview) this.findviewbyid(r.id.gv_info);
10 
11         imgs=new int[]{r.drawable.a011,r.drawable.a012,r.drawable.a013,r.drawable.a014,r.drawable.a015,r.drawable.a016,
r.drawable.a017,r.drawable.a018,r.drawable.a019,r.drawable.a0110,r.drawable.a0111}; 12 mlist=new arraylist<map<string, object>>(); 13 for(int i=0;i<11;i++) { 14 map<string, object> map = new hashmap<string, object>(); 15 map.put("img", imgs[i]); 16 map.put("txt", "第" + i + "个"); 17 mlist.add(map); 18 } 19 myadapter adapter =new myadapter(this); 20 gvinfo.setadapter(adapter); 21 gvinfo.setonitemclicklistener(new adapterview.onitemclicklistener() { 22 @override 23 public void onitemclick(adapterview<?> parent, view view, int position, long id) { 24 textview textview= (textview) view.findviewbyid(r.id.tv_info); 25 string msg = textview.gettext().tostring(); 26 toast.maketext(mainactivity.this,msg,toast.length_short).show(); 27 } 28 }); 29 30 }

备注

学习一门新的语言,坚持的源头是兴趣,坚持的前方是希望。