在我看来GridView的功能似乎跟ListView的功能相似,同样作为android上的布局控件,GridView被称为网格视图,因为用它来做网格状的布局是非常方便的,比如说九宫格,
先来看看下面的代码:
GridView gridview ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
View view = View.inflate(this, R.layout.activity_main, null);
setContentView(view);
gridview = (GridView) findViewById(R.id.GridView1);
gridview.setAdapter(new MyAdapter(this));
}
class MyAdapter extends BaseAdapter{
private Context context;
private Integer [] imgs = {R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};
public MyAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return imgs.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
ImageView imageView;
if(arg1 == null){
imageView = new ImageView(context);
imageView.setLayoutParams(new GridView.LayoutParams(75,75));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
}
else{
imageView = (ImageView) arg1;
}
imageView.setImageResource(imgs[arg0]);
return imageView;
}
}
有没有觉得GridView的使用跟ListView有点相似呢?
都是用适配器把要布局的内容放到控件中。
GridView的用法有很多种,上面介绍的只是最为简单的一种。
我们还可以向下面一样写代码:
private GridView gridview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Map<String,Object>> items = new ArrayList<Map<String,Object>>();
for(int i = 0; i < 9;i++){
Map<String, Object> item = new HashMap<String, Object>();
item.put("image", R.drawable.ic_launcher);
items.add(item);
}
SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.gridview, new String []{"image"},new int []{R.id.image});
gridview = (GridView) findViewById(R.id.GridView1);
gridview.setAdapter(adapter);
}
这两种方法都是达到了同样的效果,但是你们有没有发现,第二种方法其实比第一种方法灵活得多呢。比如我稍微在适配器那里改一下代码:
SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.gridview, new String []{"image","text"},new int []{R.id.image,R.id.text});
然后在List也加上以下代码:
item.put("image", R.drawable.ic_launcher);
item.put("text", "pic" + i);
items.add(item);
我们将会看到图片下面会多了文字描述。