网格视图(GridView)
GridView是按照行列的形式来显示内容,一般用于图片、图标的显示。GridView也可以像第4章介绍ListView一样,以列表的形示来显示内容。首先来看一下GridView的一些基本属性,如表5.1所示。
表5.1 GridView属性
属性名称 | 属性说明 |
android:columnWidth | GridView中每一列的宽度 |
android:gravity | 控件上面信息的位置 |
android:numColumns | 设置GridView的列数 |
android:horizontalSpacing | 设置水平之间的间距 |
android:verticalSpacing | 设置垂直之间的间距 |
如果要显示内容,同样要为GridView设置一个适配器(Adapter)。在这里我们也是写一个类继承BaseAdapter类,重写其中的方法,主要是重写getView()方法设置图片的格式,下面通过一个简单的实例来说明它的用法。
以每行4个图片排列,这可以通过android:numColumns属性或代码进行设置。所显示的内容是通过一个适配器来提供的。然后通过GridView的setAdapter方法设置适配器,下面来看看适配器的实现(详细代码请参考光盘源代码:第5章\GridViewDemo\src\com\zhy\gridview\adapter\MyAdapter.java)。
关于GridView的布局文件如下:
- //图片数组
- private int[] images = {R.drawable.sample_thumb_0,R.drawable.sample_thumb_1,
- R.drawable.sample_thumb_2, R.drawable.sample_thumb_3,R.drawable.sample_thumb_4,
- R.drawable.sample_thumb_5, R.drawable.sample_thumb_6,R.drawable.sample_thumb_7,
- R.drawable.sample_thumb_1,R.drawable.sample_thumb_5, R.drawable.sample_thumb_4,
- R.drawable.sample_thumb_4,R.drawable.sample_thumb_4};
- private Context context;
- public MyAdapter(Context context) {
- this.context = context;
- }
- public int getCount() {
- return images.length;
- }
- public Object getItem(int position) {
- return position;
- }
- public long getItemId(int position) {
- return position;
- }
- public View getView(int position, View convertView, ViewGroup parent) {
- ImageView imageView;//图片控件
- if(convertView == null){
- //实例化ImageView对象
- imageView = new ImageView(context);
- //设置ImageView对象的布局
- imageView.setLayoutParams(new GridView.LayoutParams(45,45));
- //设置边界对齐
- imageView.setAdjustViewBounds(true);
- imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
- //设置间距
- imageView.setPadding(8, 8, 8, 8);
- }else{
- imageView = (ImageView) convertView;
- }
- //这是ImageView设置图片资源
- imageView.setImageResource(images[position]);
- return imageView;
- }
通过实例可以看出,GridView控件显示数据主要在于Adapter,我们也可以为GridView添加事件。
- <?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:background="#ffffff"
- android:orientation="vertical" >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textSize="18dip"
- android:textColor="#000000"
- android:text="GridView实例" />
- <GridView
- android:id="@+id/gridView"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:horizontalSpacing="5dip"
- android:verticalSpacing="5dip"
- android:numColumns="4"
- ></GridView>
- </LinearLayout>