当前位置: 移动技术网 > IT编程>移动开发>Android > 一起学Android之GridView

一起学Android之GridView

2019年02月02日  | 移动技术网IT编程  | 我要评论

李兆前背景,一纸休书,衡天主机

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

概述

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

如下图所示:

 

数据绑定步骤

如下图所示:

 涉及知识点

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

示例效果图

如下图所示:

核心代码

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 }

备注

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网