网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字、图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现。

  本文将以一个具体的实例来说明如何使用GridView控件实现手机屏幕上各个应用软件图标的摆放,以及应用软件名称的显示。

  完成后的程序运行效果如图1所示。

图1 主界面显示效果

1.界面布局

  通过查看GridView的API帮助文档(http://developer.android.com/reference/android/widget/GridView.html),可以了解到GridView的常用xml属性如图2所示。

图2 GridView的常用xml属性

  其中,android:columnWidth[int]用于设置每列的宽度;android:gravity[int]用于设置每个网格的比重;android:horizontalSpacing[int]用于设置网格之间列的默认水平距离;android:numColumn[int]用于设置列数;android:stretchMode[int]用于设置列应该以何种方式填充可用空间;android:verticalSpacing[int]用于设置网格之间行的默认垂直距离。

  了解了上述的GridView常用xml属性之后,我们就可以完成对主界面的xml布局文件编写了。在xml布局文件中,我们使用LinearLayout对整个界面进行垂直布局,然后在该布局中添加一个GridView控件即可。具体的xml布局文件源码如下:

 1   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2       xmlns:tools="http://schemas.android.com/tools"
 3       android:orientation="vertical"
 4       android:layout_width="match_parent"
 5       android:layout_height="match_parent" >
 6   
 7       <GridView
 8           android:id="@+id/gridView"
 9           android:layout_width="match_parent"
10           android:layout_height="wrap_content"
11           android:numColumns="4"
12           android:horizontalSpacing="10dp"
13           android:verticalSpacing="10dp">
14       </GridView>
15   
16   </LinearLayout>

  在GridView控件中,我们通过android:numColumns="4"指定了网格的列数为4;通过android:horizontalSpacing="10dp"和android:verticalSpacing="10dp"指定了网格之间的水平距离和垂直距离都为10dp。

2.网格元素布局

  如图1所示,在每个网格内,我们都需要显示两项内容:应用软件图标以及应用软件名称。因此,我们还需要对网格内元素进行相应的布局。

  我们可以在项目工程的layout目录下新建一个名为“griditeminfo.xml”的xml布局文件,完成对网格内元素的布局。在该xml布局文件中,我们使用相对布局RelativeLayout对网格内的元素进行排列,将一个ImageView控件以水平居中的形式放置在网格内(上方),用来显示应用程序的图标;将一个TextView控件以水平居中的形式放置在网格内(下方),用来显示应用程序的名称。具体的griditeminfo.xml源码如下:

 1   <?xml version="1.0" encoding="utf-8"?>
 2   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3       android:layout_width="match_parent"
 4       android:layout_height="wrap_content"    >
 5   
 6       <ImageView
 7           android:id="@+id/itemImage"
 8           android:layout_width="wrap_content"
 9           android:layout_height="wrap_content"
10           android:layout_centerHorizontal="true"    >
11       </ImageView>
12   
13       <TextView
14           android:id="@+id/itemName"
15           android:layout_below="@+id/itemImage"
16           android:layout_width="wrap_content"
17           android:layout_height="wrap_content"
18           android:layout_centerHorizontal="true"    >
19       </TextView>
20   
21   </RelativeLayout>

3.资源储存

  在该实例中,我们需要对众多的应用软件图标以及应用软件名称进行储存。很显然,应用软件图标以及应用软件名称之间存在着一一对应的关系,我们可以使用HashMap分别对应用软件图标以及应用软件名称进行存储,然后再将HashMap添加到ArrayList中,便可以完成资源的储存了。具体实现方法如下:

1   //将图标图片和图标名称存入ArrayList中
2   //Author:博客园-依旧淡然
3   ArrayList<HashMap<String, Object>> item = new ArrayList<HashMap<String, Object>>();
4   for (int i = 0; i < resIds.length; i++) {
5       HashMap<String, Object> map = new HashMap<String, Object>();
6       map.put("itemImage", resIds[i]);
7       map.put("itemName", name[i]);
8       item.add(map);
9   }

  其中,数组resIds[]储存着应用软件图标的资源id;数组name[]储存着应用软件名称,并通过for循环遍历语句将其存入了HashMap中。

4.简单适配器SimpleAdapter

  简单适配器SimpleAdapter继承自BaseAdapter,用于将静态数据映射到xml文件中定义好的视图当中。比如可以指定静态数据为由Map组成的ArrayList。在ArrayList中每个条目对应List中的一行,Map可以包含多项数据。

  SimpleAdapter的构造方法如下:

  public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to);

  其中,参数context用于指定SimpleAdapter所关联的上下文对象;参数data用于指定Map列表;参数resource用于指定资源标识符(即列表项的视图布局);参数from用于指定Map列表中每项数据所对应的标签;参数to用于指定Map列表中每项数据在布局文件中所要匹配的对象。

  在该实例中,实现SimpleAdapter的构造方法如下所示:

1   //SimpleAdapter对象,匹配ArrayList中的元素
2   //Author : 博客园-依旧淡然
3   SimpleAdapter simpleAdapter = new SimpleAdapter
4   (this, item, R.layout.griditeminfo, new String[] {"itemImage","itemName"},
5           new int[] {R.id.itemImage,R.id.itemName}) {
6   };

  实现了简单适配器SimpleAdapter之后,我们还需要将该简单适配器SimpleAdapter添加到GridView对象当中去,可以通过如下方法实现:

  mGridView.setAdapter(simpleAdapter);

5.事件监听

  在实际的应用当中,我们需要对用户的操作进行监听,即需要知道用户选择了哪一个应用软件。

  在网格控件GridView中,常用的事件监听器有两个:OnItemSelectedListener和OnItemClickListener。其中,OnItemSelectedListener用于项目选择事件监听,OnItemClickListener用于项目点击事件监听。

  要实现这两个事件监听很简单,继承OnItemSelectedListener和OnItemClickListener接口,并实现其抽象方法即可。其中,需要实现的OnItemClickListener接口的抽象方法如下:

  public void onItemClick(AdapterView<?> parent, View view, int position, long id);

  需要实现的OnItemSelectedListener接口的抽象方法有两个,分别如下:

  public void onItemSelected(AdapterView<?> parent, View view, int position, long id);

  public void onNothingSelected(AdapterView<?> parent);

相关资料:

Android入门第八篇之GridView(九宫图)

http://blog.csdn.net/hellogv/article/details/4567095

Android中有趣味的GridView

http://www.cnblogs.com/carmanloneliness/archive/2012/05/29/android_%E8%B6%A3%E5%91%B3%E7%9A%84gridView%E6%8E%A7%E4%BB%B6.html

Android常用适配器总结

http://blog.csdn.net/ygzk123/article/details/7413456

Android学习笔记之SimpleAdapter

http://www.2cto.com/kf/201202/118409.html

转载于:https://www.cnblogs.com/menlsh/archive/2013/03/03/2942127.html

Android学习笔记27:网格视图GridView的使用相关推荐

  1. Android学习笔记(27):日历视图Calendar

    日历视图CalendarView可用于显示和选择日期. 可以调用setOnDateChangedListener()方法绑定事件监听器. 常用XML属性和相关方法: XML属性 相关方法 说明 and ...

  2. android学习日记16--GridView(网格视图)

    一.GridView 1.简述 GridView按照行列来显示图片或文本的一种视图,排列其实有点类似TableLayout布局, 不过和TableLayout还是差别很大的,倒比较像二维的ListVi ...

  3. 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner

    目录(?)[-] GridView Spinner GridView GridView是网格状布局,如图所示.在了解ListView后,很容易了解GridView.下面是例子的XML文件. <? ...

  4. Android学习笔记:Android基础知识点(不断更新中)

    1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...

  5. Android学习笔记21:ImageView获取网络图片

    Android平台有3种网络接口可以使用,它们分别是:java.net.*(标准java接口).org.apache(Apache接口)和android.net.*(Android网络接口).本文将使 ...

  6. Android学习笔记26:图片切换控件ImageSwitcher的使用

    在Windows操作系统中,要查看多张图片,可以通过使用"Windows照片查看器"在"上一张"和"下一张"之间切换,进行多张图片的浏览. ...

  7. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  8. Android学习笔记:TabHost 和 FragmentTabHost

    2019独角兽企业重金招聘Python工程师标准>>> Android学习笔记:TabHost 和 FragmentTabHostTabHost命名空间:android.widget ...

  9. Android学习笔记:TabHost 和 FragmentTabHost(转)

    Android学习笔记:TabHost 和 FragmentTabHost(转) 转自:http://www.cnblogs.com/asion/p/3339313.html 作者:Asion Tan ...

  10. Android学习系列(27)--App缓存管理

    随笔- 53 文章- 10 评论- 1064 Android学习系列(27)--App缓存管理 无论大型或小型应用,灵活的缓存可以说不仅大大减轻了服务器的压力,而且因为更快速的用户体验而方便了用户. ...

最新文章

  1. 仅支持BCH的众筹平台Coinfundr或能革新众筹业
  2. MySQL分库分表 mycat
  3. AI+遥感:释放每个像元价值(人工智能应用案例)
  4. 2013计算机一级考试综合试题答案,2013全国计算机等级考试试题题库及答案.doc
  5. js和jQuery判断数组是否包含指定元素
  6. 70个经典的 Shell 脚本面试问题
  7. Protocol Buffers数据编码
  8. ajax js java省市三级联动菜单,javaweb--json--ajax--mysql实现省市区三级联动(附三级联动数据库)(示例代码)...
  9. GIS + 现代农业”,将会擦出怎样的火花?——智慧农业专题论坛侧记
  10. 软件工程硕士论文撰写指导
  11. cfar matlab,雷达无线电系列(二)经典CFAR算法图文解析与实现(matlab)
  12. 多省市房屋交易平台引入电子签章推动住房交易合同网签备案
  13. JAVA实现SMS短信发送(附:代码)
  14. 总结几点学习模电难的原因
  15. PAT 1056 Mice and Rice
  16. 漫谈程序员(二)程序员保值的4个秘密
  17. 信号与线性系统翻转课堂笔记3
  18. C#GPS坐标转百度地图坐标
  19. 关于快速排序的三种划分元素的方法
  20. 系统崩溃!win10系统修复和数据恢复方法总结

热门文章

  1. vue for循环中使用setTimeout没用 笔记
  2. 7c盘满了怎么扩容_C盘爆满怎么办?扩容!
  3. datatable自定义搜索和导出按钮并解决在后端分页无法导出全部数据的问题
  4. 七、面向对象三大特征(一)—— 封装
  5. 匿名内部类为什么访问外部类局部变量必须是final的?
  6. Hadoop之crontab与ntpd
  7. Linux 命令之 crontab 计划任务与自动同步系统时间
  8. 阶段3 1.Mybatis_07.Mybatis的连接池及事务_3 mybatis连接池的分类
  9. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_16_常用的函数式接口_Function接口中的方法Apply...
  10. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第4节 等待唤醒机制_2_等待唤醒案例分析...