首页

GridView控件

搜索

.概述

GridView控件称为网格列表,在android中的使用频率较高,该控件可按多行多列显示信息,表现能力很强。如图-1所示:

图-1

常用属性

属性名

Java的方法

作用

ColumWidth

setColumnWidth(int)

设置列宽度

Gravity

setGravity(int)

设置对齐方式

horizontalSpacing

setHorizontalSpacing(int)

设置各元素之间的水平间距

numColumns

setNumColumns(int)

设置列数

stretchMode

setStrechMode(int)

设置拉伸模式

verticalSpacing

setVerticalSpacing(int)

设置各元素间的垂直间距

其中,stretchMode有以下可选的属性值

NO_STRETCH

不拉伸

STRETCH_SPACING

仅拉伸元素之间的间距

STRETCH_SPACING_UNIFORM

表格元素本身、元素之间的间距一起拉伸

STRETCH_COLUMN_WIDTH

仅拉伸表格元素本身

示例代码:

1、以下是XML文件中定义网格控件整体显示样式的代码(该代码通常在main.xml中):

<GridView  

android:id="@+id/gv"

    android:layout_width="fill_parent" 

    android:layout_height="wrap_content" 

    android:columnWidth="85dp"

    android:numColumns="auto_fit"

    android:horizontalSpacing="5dp"

    android:verticalSpacing="5dp"/>

2、以下是定义网格控件中每个列表项的布局代码:

<?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:orientation="vertical">

<ImageView 

android:id="@+id/ivCity"

android:layout_width="85dp"

android:layout_height="65dp"

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

<TextView 

android:id="@+id/tvName"

android:layout_width="85dp"

android:layout_height="wrap_content"

android:text="北京"

android:gravity="center_horizontal"/>

</LinearLayout>

说明:

以上两个文件共同定义了图-1的GridView控件显示的样式,其中每个列表项是由一个ImageView和一个TextView控件构成的。

常用方法

setAdapter(Adapter adapter)

1、作用:设置适配器与GridView对象相关联。

2、参数-adapter:适配器对象。

3、示例:

//创建网格对象

GridView gv=(GridView)findViewById(R.id.gv);

         gv.setAdapter(adapter);//设置适配器与网格对象相关联

setOnItemClickListener (Context)

1、作用:设置列表项单击响应事件

2、说明:Context是一个上下文对象

setOnItemLongClickListener (Context)

1、作用:、设置列表项的长按事件

2、说明:Context是一个上下文对象

3、提示:GridView控件的单击和长按事件与ListView控件的单击和长按事件处理方法完全相同。既可以用内部匿名类来实现,也可以通过Acivity继承OnItemClickListener或OnItemLongClickListener接口,再实现相应的方法来实现。

【示例】

显示图-2的网格列表,当单击其中某个列表项时,在下方显示该城市的文字介绍。

图-2

提示:Gridview控件在使用上,除在XML中定义GridView的整体显示样式外,其它步骤与ListView完全相同。

步骤1、在res/layout/main.xml文件中定义GridView控件,如下代码所示:

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

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

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent">

<GridView  

android:id="@+id/gv"

    android:layout_width="fill_parent" 

    android:layout_height="wrap_content" 

    android:columnWidth="85dp"

    android:numColumns="auto_fit"

    android:horizontalSpacing="5dp"

    android:verticalSpacing="5dp"/>

<EditText 

android:id="@+id/etIntro"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/beijing_introduce"

android:layout_toRightOf="@+id/ivCity"

android:lines="3"

android:editable="false"

android:visibility="invisible"/>

</LinearLayout>

步骤2、定义GridView的列表项显示样式,在res/layout文件夹下创建gridview_item.xml文件,该文件代码如9.2.2.常用属性中示例代码2所示。

步骤3、在Activity类中编写如下代码:

public class MainAct extends Activity implements OnItemClickListener{

//存放数据的集合

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

    String[] mKey={"photoId","name"};//键名数组

    int[] mResIds={R.id.ivCity,R.id.tvName};//列表项中各控件的资源索引值

    String[] mIntroduce;//存放城市简介信息

@Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        initData();//初始化数据

        //创建适配器对象

        SimpleAdapter adapter=new SimpleAdapter(this, mData, 

         R.layout.gridview_item, 

         mKey, 

         mResIds);

        //创建网格对象

        GridView gv=(GridView)findViewById(R.id.gv);

        gv.setAdapter(adapter);//设置适配器与网格对象相关联

        gv.setOnItemClickListener(this);//注册列表项单击事件

    }

//本方法初始化集合和城市介绍的数组

    private void initData(){

       int[] photoId={

         R.drawable.beijing,R.drawable.tianjing,

         R.drawable.shanghai,R.drawable.chongqing

         };

         String[] cityNames=getResources().getStringArray(R.array.citys);

         mIntroduce=getResources().getStringArray(R.array.introduce);

         Map<String,Object> city;

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

city=new HashMap<String, Object>();

city.put(mKey[0], photoId[i]);

city.put(mKey[1], cityNames[i]);

mData.add(city);

}

    }

    //实现列表项单击事件方法

@Override

public void onItemClick(AdapterView<?> parent, View view, int position,

long id) {

EditText etIntro=(EditText)findViewById(R.id.etIntro);

etIntro.setVisibility(View.VISIBLE);//设置控件为可见状态

etIntro.setText(mIntroduce[position]);//显示被选择的城市信息

}

}

说明:

代码执行的流程:

(1)首先调用自定义的initData方法为集合初始化数据;

(2)创建SimpleAdapter对象;

(3)创建GridView对象;

(4)设置网格对象与适配器对象相关联;

(5)注册网格对象的单击事件。

标注(2)中定义了网格中需要显示的图片数组、城市名称数组和城市介绍数组,其中城市介绍数组是从资源中获取,R.array.introduce是res/values/arrays文件中定义的数组,该数组名:introduce。

GridView与ListView的不同

GridView与ListView不同的地方在布局xml的设置上:

   1、需要指定某一列的宽度

      android:columnWidth="60dp"

   2、设置列的个数是自适应

      android:numColumns="auto_fit"

   3、指定扩展模式,根据哪个条件去适应布局

      android:stretchMode="columnWidth"

 

上一页 下一页