GridView
is a ViewGroup
that displays items in a
two-dimensional,
scrollable grid.(这里GroidView作为一个View容器,负责二维显示view控件,和ListView类似),下面通过对Android帮助文档的例子作修改后所完成的效果:
http://xiaolongque.iteye.com/picture/92946
<在显示图片的同时显示文字>
例子中这丑狗的图片可从下载http://developer.android.com/shareables/sample_images.zip
好的,首先我们先把图片保存到res/drawable文件夹中
定义以下两个布局文件
<?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnWidth="90dip" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" />
<?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"> <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="test" /> </LinearLayout>
其中child.xml中定义GridView中每一点的子控件内容
Activity如下:
package com.xl;
/*
* author by Que
*/
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
public class HelloGridView extends Activity {
private GridView gridView ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gridView = (GridView)findViewById(R.id.gridview);
NewAdapter adapter = new NewAdapter(HelloGridView.this);
gridView.setAdapter(adapter);
}
public class NewAdapter extends BaseAdapter{
public final class ViewHolder{
ImageView img;
TextView text1;
}
private LayoutInflater layout = null;
public NewAdapter(Context context) { //获取上下文对象
this.layout = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mThumbIds.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder ;
if(convertView == null) {
holder = new ViewHolder();
convertView = layout.inflate(R.layout.child, null);
holder.img = (ImageView)convertView.findViewById(R.id.iv);
holder.text1 = (TextView)convertView.findViewById(R.id.tv);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.img.setImageResource(mThumbIds[position]);
//holder.img.setLayoutParams(new GridView.LayoutParams(85,85));
holder.img.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
holder.img.setPadding(8, 8, 8, 8);
return convertView;
}
private final Integer[] mThumbIds = {
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7
};
}
}
通过继承BaseAdapter,根据getCount来调用getView对数据进行一一映射。其中
convertView = layout.inflate(R.layout.child, null);
holder.img = (ImageView)convertView.findViewById(R.id.iv);
holder.text1 = (TextView)convertView.findViewById(R.id.tv);
Inflate a new view hierarchy from the specified xml resource.(从一个xml布局文件中获取view层次结构并赋予convertView,通过convertView来实例化ImageView和TextView组件。由此我们可以在里面对布局文件中所包含的所有控件进程初始化处理,如设置事件监听。