项目2-5 校园生活小助手主界面设计

学习目标

■ 掌握GridView组件的使用方法,了解GridView组件事件监听处理机制。

■ 掌握GridView组件与Adapter适配器相结合的应用。

■ 学会运用GridView组件进行校园生活小助手主界面设计。

项目描述

运用GridView组件与SimpleAdapter适配器相结合的方法,设计应用程序项目的主界面,如校园生活小助手主界面设计,要求在主界面上能显示应用程序项目的图片。

知识储备

2.5.1 GridView组件

在Android中,GridView被称为网格视图,它是按照行、列分布的方式来显示多个数据项的可滚动的视图组件,通常用于显示图片或图标等,如在Android手机中显示应用程序界面和实现九宫格图等界面时,经常是采用GridView组件进行界面设计。

GridView和ListView有共同的父类AbsListView,它们的区别在于:ListView只在一个方向分布,而GridView会在两个方向分布。在使用网格视图时,首先需要在屏幕上添加GridView组件,通常是使用GridView标记在XML布局文件中添加。

1.GridView组件在XML文件中的基本语法

格式如下:

<GridView

   属性列表

/>

2.GridView的常用属性和方法

GridView的常用属性和方法如表2-15所示。

表2-15 GridView的常用属性和方法

GridView与ListView的使用方式相似,GridView也需要通过Adapter提供显示的数据,开发者可通过 SimpleAdapter来为 GridView提供数据,也可以通过自定义 Adapter并继承自BaseAdapter为GridView提供数据。不论是哪种方式,GridView与ListView的用法基本一致。

3.GridView组件监听器

GridView 组件的监听器用于监听用户选择了哪个 item 选项,设定该监听器的方法为public void onItemClick(AdapterView<?> parent, View view, int index, long id),它的功能是用于监听GridView选项被选中的事件。当用户单击GridView的某个item选项时,为获得该选项index的值,需要为GridView添加OnItemClickListener监听器,并根据index的值决定将要跳转到下一级程序的界面窗口。

2.5.2 GridView应用案例

下面通过【例2-9】介绍运用GridView组件设计一款手机显示菜谱界面的方法。

【例2-9】在Android Studio中创建新项目,名称为GridViewDemo。修改项目下的布局文件activity_main_xml,添加一个GridView组件,通过定义SimpleAdapter适配器,可以提供数据源的列表项,并设置数据列表项为菜谱图片和菜谱名称。

第一步,修改GridViewDemo项目res/layout目录下的布局文件activity_main_xml,将默认添加的TextView组件删除,并添加一个GridView组件,布局代码如下:

<GridView

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:numColumns="3"

    android:id="@+id/ms_gridview"

    android:verticalSpacing="20dp"

    android:horizontalSpacing="10dp"

    android:stretchMode="columnWidth"

    android:gravity="center"/>

第二步,创建GridView中数据选项布局文件meishi_item.xml的方法:右击【res】→【layout】目录,选择快捷菜单【New】→【XML】→【Layout XML File】,输入meishi_item,单击【Finish】按钮。

在数据选项布局文件 meishi_item.xml 中设置显示菜谱图片和菜谱名称的组件,并将线性布局修改为相对布局。布局代码如下:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

   android:layout_width="match_parent"

   android:layout_height="match_parent">

   <ImageView

     android:layout_width="match_parent"

     android:layout_height="100dp"

     android:id="@+id/ms_img"

     android:layout_centerHorizontal="true"

     android:scaleType="fitXY"/>

   <TextView

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:id="@+id/ms_desc"

     android:layout_centerHorizontal="true"

     android:layout_below="@+id/ms_img"/>

</RelativeLayout>

第三步,在MainActivity.java程序中先定义相关的变量,创建适配器需要的数据集合对象getData()方法,然后在onCreate()方法中获取布局文件中的GridView组件资源,定义数据源适配器,最后将适配器与GridView组件相关联。关键代码如下:

public class MainActivity extends Activity {

    private GridView gridView;

    private List<Map<String,Object>> data_list;

    private SimpleAdapter sim_adapter;

    //将网格中的图片、文字资源定义在相应数组里

    public static int[] icon = {R.drawable.ms1,R.drawable.ms2,R.drawable.ms3,

    R.drawable.ms4,R.drawable.ms5,R.drawable.ms6,R.drawable.ms7,R.drawable.ms8,

    R.drawable.ms9,R.drawable.ms10,R.drawable.ms11,R.drawable.ms12};

    private String[] iconName = {"臭豆腐","糖油粑粑","血旺","龙脂猪血","宝庆猪血 丸子","洞庭银鱼","君山银针鸡片","腊味合蒸", "椒盐馓子","麻辣小龙虾","红烧猪脚","长沙米粉"};

    @Override

    protected void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     setContentView(R.layout.activity_main);

     gridView = (GridView) this.findViewById(R.id.ms_gridview);

     SimpleAdapter simpleAdapter = new SimpleAdapter(this,getData(),R.layout.m-

     eishi_item,new String[]{"img","txt"},new int[]{R.id.ms_img,R.id.ms_desc});

     gridView.setAdapter(simpleAdapter);

    }

    //创建适配器需要的数据集合对象

     public List<Map<String,Object>>getData(){

       List<Map<String,Object>> list = new ArrayList<Map<String, Object>>();

       for(int i = 0;i<icon.length;i++){

         Map<String,Object> map = new HashMap<String,Object>();

         map.put("img",icon[i]);

         map.put("txt",iconName[i]);

         list.add(map);    }

       return list; }

菜谱界面运行结果如图2-16所示。

图2-16 显示菜谱界面

项目实施

1.项目分析

运用GridView组件与SimpleAdapter适配器相结合的方法,设计校园生活小助手应用程序项目的主界面,要求在主界面上能显示应用程序项目的图片,效果如图2-17所示。

图2-17 校园生活小助手界面

校园生活小助手界面设计特点:

① 整个界面由标题和2列3行的数据项组成。

② 每个数据项由一个图片组成。

分析结果:

① 界面可采用相对布局或线性布局技术。

② 用一个图片组件表示标题。

③ 用一个GridView组件实现网格视图功能。

2.项目实现

(1)新建校园生活小助手项目。

启动 Android Studio,在 Android Studio 起始页选择【Start a new Android Studio project】,或在Android Studio主页菜单栏上选择【File】→【New】→【New Project】,新建 Android 工程。在 New Project 页面上输入应用程序的名称(SchoolHelper)、公司域名(com.zzhn.zheng)和存储路径,单击【Next】按钮。然后,选择工程的类型以及支持的最低版本,单击【Next】按钮。之后选择是否创建Activity以及创建Activity的类型,选择【Empty Activity】,单击【Finish】按钮。

(2)布局文件设计。

首先在res/layout文件夹中,打开布局的activity_main.xml文件,使用线性布局技术,添加ImageView、GridView组件,设置ImageView、GridView组件属性,删除原有的TextView组件。

操作方法:展开【res】→【layout】文件夹,双击【activity_main.xml】文件,打开右侧布局文件text编辑窗口,在编辑窗口中输入activity_main.xml文件代码,如下:

<ImageView

  android:layout_width="match_parent"

  android:layout_height="wrap_content"

  android:src="@drawable/bg"/>

<GridView

  android:id="@+id/gridView"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  android:numColumns="2"

  android:stretchMode="columnWidth">

</GridView>

创建GridView中item选项布局文件grid_item.xml。

操作方法:右击【res】→【layout】目录,选择快捷菜单【New】→【XML】→【Layout XML File】,输入grid_item,单击【Finish】按钮。在选项布局文件grid_item.xml中设置显示应用程序项目的图片组件,布局代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:padding="20dp"

   android:gravity="center">

   <ImageView

     android:id="@+id/img"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:src="@drawable/schoolview_on"/>

</LinearLayout>

(3)编写Java程序代码。

首先在 MainActivity.java 程序中定义相关的变量,创建适配器需要的数据集合对象getData()方法。然后在onCreate()方法中获取布局文件中的GridView组件,再定义数据源适配器。最后将适配器与GridView组件相关联,并设置GridView组件的监听器。关键代码如下:

public class MainActivity extends Activity {

    private GridView gridView;

    //网格中的图片资源定义在一个数组里面

    private int[] img = new int[]{R.drawable.schoolview_on,R.drawable.timg,

    R.drawable.schooltel_on,R.drawable.note_on,R.drawable.course_on,

    R.drawable.music_on};

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_school_helper);

       gridView = (GridView)this.findViewById(R.id.gridView);

       //定义数据源适配器

       SimpleAdapter simpleAdapter = new SimpleAdapter(this,getData(),

       R.layout.

       grid_item,new String[]{"img"},new int[]{R.id.img});

       gridView.setAdapter(simpleAdapter);

       //设置监听

      gridView.setOnItemClickListener(itemlist);

    }

    //创建适配器需要的数据集合对象

    public List<Map<String,Object>> getData(){

       List<Map<String,Object>> list = new ArrayList<Map<String, Object>>();

       for (int i =0;i<img.length;i++){

          Map<String, Object> map = new HashMap<String,Object>();

          map.put("img",img[i]);

          list.add(map);

       }

       return list;

     }

     //监听事件处理

     private AdapterView.OnItemClickListener itemlist = new AdapterView.OnItem-

     ClickListener() {

     @Override

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

       { //根据index值判断从哪里开始跳转到哪个窗口

          switch (index){

          case 0:

             //校园风光,从哪里开始跳转到哪个窗口

             break;

            ……

          }

         //执行跳转

       }

     };

}

(4)调试运行。

① 单击工具栏上的 AVD Manager图标,打开虚拟设备对话框,在虚拟设备对话框中单击启动虚拟设备的命令按钮,打开Android Studio模拟器。

② 单击工具栏上的“三角形”运行按钮,运行本项目。

项目总结

通过本项目的学习,读者应学会运用GridView组件实现网格视图界面的设计方法。

① 创建一个添加了GridView组件的布局文件,并设置相应属性。

② 创建GridView组件中item选项的布局文件。

③ 创建数据源,并实现数据源、SimpleAdapter适配器和GridView组件三者之间的相互关联。

④ 设置GridView组件的监听器。

项目训练——用GridView组件实现应用程序列表界面

模拟手机屏幕设计一个应用程序列表界面,要求界面上至少包括8个应用程序项目,按4列排列,每个应用程序项目由图标和文字组成,所选应用程序项目的图标由读者朋友们自定。

练习题

2-5-1 如何设置GridView组件的缩放模式?

2-5-2 如何设置GridView组件的列数?

2-5-3 说明GridView使用方法和作用。

2-5-4 如何监控GridView组件中item选项的变化?