一.网格视图的基础知识

        GridView网格视图是按照行,列分布的方式来显示多个组件,通常用于显示图片或是图标等,在使 用网格视图时,首先需要要在屏幕上添加GridView组件。

(一)XML配置:

android:id="@+id/gridView1" android:layout_width="match_parent"android:layout_height="wrap_content" android:stretchMode="columnWidth"android:numColumns="4" > 

(二)常用属性:

  1. android:columnWidth 用于设置列的宽度
  2. android:gravity 用于设置对齐方式
  3. android:horizontalSpacing 用于设置各元素之间的水平间距
  4. android:numColumns 用于设置列数
  5. android:stretchMode 用于设置拉伸模式,其中属性值可以是
    //none(不拉伸),
    //spacingWidth(仅拉伸元素之间的间距),
    //columnWidth(仅拉伸表格元素本身)或
    //spacingWidthUniform(表格元素本身,元素之间的间距一起拉伸)
    6.android:verticalSpacing 用于设置各元素之间的垂直间距

(三)适配器

        GridView与ListView类似,都需要通过Adapter来提供显示的数据.但是,ListView可以通过 android:entries来提供资源文件的数据源,GridView没有这些属性,所以必须通过适配器来为其 添加数据。
        GridView的事件和ListView一样,都是设置setOnItemClickListener(OnItemClickListener listener);为对应的条目设置点击事件。

二.网格布局的一个示例

程序效果:
高级控件之网格视图(GridView)_第1张图片
这里上面是一个GridView下面是一个ImageView,点击上面的GridView中的对应图片,会显示在下面的ImageView中。

(一)布局文件的代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:gravity="center"     >    <GridView        android:id="@+id/main_gv"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="5"        android:numColumns="5" />    <ImageView        android:id="@+id/main_iv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_weight="3"        android:src="@drawable/img01" />LinearLayout>

(二)GridView中某一个视图的布局设置item_list.xm

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:gravity="center"    android:padding="10dp" >    <ImageView        android:id="@+id/item_iv"        android:layout_width="80dp"        android:layout_height="80dp"        android:layout_centerVertical="true"        android:padding="5dp"        android:src="@drawable/email" />RelativeLayout>

先放一些图片资源到drawable文件夹中,命名分别为w1到w13

(三)java代码设计

package com.example.lesson7_listview;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.GridView;import android.widget.ImageView;import android.widget.SimpleAdapter;/*  * simpleAdapter和GridView的使用 *  */public class MainActivity extends Activity {    // 数据源    // 图片1    int[] images = { R.drawable.w1, R.drawable.w2,R.drawable.w3,R.drawable.w4,R.drawable.w5,R.drawable.w6,            R.drawable.w7,R.drawable.w8,R.drawable.w9,R.drawable.w10,R.drawable.w11,R.drawable.w12,R.drawable.w13,            R.drawable.w14,R.drawable.w15,R.drawable.w16,R.drawable.w17,R.drawable.w18,R.drawable.w19};    // GridView布局    GridView gridview;    //    ImageView iv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 实例化ListView        gridview = (GridView) findViewById(R.id.main_gv);        //        iv = (ImageView) findViewById(R.id.main_iv);        // 创建data数据        // 这里每一个条目的数据使用的是一个HashMap保存,所以value的值要用Object,可以存放图片数据        List> data = new ArrayList>();        for (int i = 0; i < images.length; i++) {            HashMap map = new HashMap();            map.put("image", images[i]);            data.add(map);        }        // HashMap中存放数据的key,后面通过对应的key取数据        String[] from = { "image" };        // item_list.xml文件中对应数据要存放到的布局控件的位置        int[] to = { R.id.item_iv };        // 创建SimpleAdapter        // 第一个参数是上下文        // 第二个参数是适配器的数据        // 第三个数据是listView的布局文件        // 第四个参数是Adapter里面HashMap里面Key的name        // 第五个参数是Adapter里面HashMap里面value的值要存放去的布局的位置        SimpleAdapter adapter = new SimpleAdapter(this, data,                R.layout.item_list, from, to);        // 把Adapter放到ListView中显示        gridview.setAdapter(adapter);        // 为网格控件设置监听事件        /*         * 这个是不对的,要设置的是点击事件,二不是选择事件         *  gridview.setOnItemSelectedListener(new         * OnItemSelectedListener() {         *          * @Override public void onItemSelected(AdapterView<?> parent, View         * view, int position, long id) { Toast.makeText(MainActivity.this,         * "点击了" + position, Toast.LENGTH_SHORT).show(); //         * iv.setImageResource(images[position]); }         *          * @Override public void onNothingSelected(AdapterView<?> parent) {         *          * } });         */        gridview.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {                iv.setImageResource(images[position]);            }        });    }}

网格视图同样是可以使用其他几种适配器来显示视图。

更多相关文章

  1. Android布局设计中的layout_weight的学习
  2. Android常用布局:线性布局和相对布局
  3. Android 文件布局一些细节备忘
  4. android 虚拟按键遮挡布局
  5. android 线性布局几个属性
  6. Android布局文件的属性值解析
  7. android学习笔记(7)AbsoluteLayout+FrameLayout+RelativeLayout+
  8. ACtivity布局之相对布局基本用法

随机推荐

  1. libGDX引擎在android APP开发中应用系列-
  2. android使用ant编译打包
  3. %1$s %1$d Android(安卓)string (java & A
  4. Android控件隐藏方式 .
  5. Android历代版本的代号
  6. Android移动开发
  7. android Activity单元测试
  8. 在Android中扫描wifi热点演示实例教程
  9. 弹出sub View在当前窗口
  10. 2010.11.11———Android(安卓)TabHost选