GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,文字等内容。想要实现一个排列整齐的布局,使用其他的布局方式也可以实现,例如ListView,但是实现起来比较复杂,用GridView是首选,也是最简单的。主要用于设置Adapter。
GridView常用的XML属性:
属性名称 | 描述 |
android:columnWidth | 设置列的宽度。 |
android:gravity | 设置此组件中的内容在组件中的位置。可选的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical可以多选,用“|”分开。 |
android:horizontalSpacing | 两列之间的间距。 |
android:numColumns | 设置列数。 |
android:stretchMode | 缩放模式。 |
android:verticalSpacing | 两行之间的间距。 |
首先要建立一个Android的工程,在layout的文件夹下面main.xml文件里面写如下代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<GridView
android:id="@+id/gridview"
android:columnWidth="80dp"
android:numColumns="auto_fit"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
/>
</LinearLayout>
在这个配置文件中GridView的属性已经在上面介绍了,在这里就不重复了。
还需要在layout的文件夹下面建一个city.xml文件,这个文件的作用是用于显示每一个单元格的。这里每一个单元格的字体大小和一些属性都可以进行设置,在这里就不重复了。City.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:orientation="vertical" >
<TextView android:id="@+id/ItemText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
下面就是Java代码:
package com.fx.cx;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;
publicclass GridViewTest extends Activity {
private GridView gridView;
private String[] citys = new String[]{"北京","上海","武汉","长沙","南京","天津","深圳","香港","澳门","西安","成都","沈阳"};
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gridView = (GridView)findViewById(R.id.gridview);
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
for (int i = 0; i < citys.length; i++) {
HashMap<String,String> map = new HashMap<String,String>();
map.put("ItemText", citys[i]);
list.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(this,list,R.layout.city, new String[]{"ItemText"},newint[]{R.id.ItemText});
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new ItemClickListener());
}
class ItemClickListener implements OnItemClickListener{
publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
HashMap<String, String> item=(HashMap<String, String>) arg0.getItemAtPosition(arg2);
setTitle((String)item.get("ItemText"));
}
}
}
在这段Java代码中,先要通过Id值获得GridView的对象,然后通过SimpleAdapter的适配器放到GridView的布局中。在构造SimpleAdapter的时候,一共有五个参数,第一个参数是传入当前上下文,第二个参数是数据的来源(ArrayList),第三个参数是ListItem的xml实现(ciry.xml文件),第四个参数是数组与ListItem对应的子项,第五个参数是ListItem的xml(city.xml文件)文件里面的TextView的Id。
得到了 SimpleAdapter 的适配器,放到 GridView 中,就可以实现网格布局,当然也可以对网格布局中的每一个 Item 都可以进行事件的监听,使用 setOnItemClickListener() 这个方法即可,但是需要实现接口 OnItemClickListItem() 。