先看效果图:
XML代码:
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context=".GridViewDemoBA" > 6 7 <!-- android:listSelector="@drawable/bg" 8 9 该属性很重要,如果不设置的话,GridView控件会自带自己的选中样式(黄色边框), --> 10 <GridView 11 android:id="@+id/gv_gridviewdemoba_mygv" 12 android:layout_width="fill_parent" 13 android:layout_height="wrap_content" 14 android:horizontalSpacing="8pt" 15 android:verticalSpacing="0pt" 16 android:numColumns="4" 17 android:stretchMode="columnWidth" 18 android:listSelector="@drawable/select_after_large"> 19 20 </GridView> 21 </LinearLayout>
适配器代码,继承自BaseAdapter
1 package com.example.gridviewdemoba; 2 3 import android.R.integer; 4 import android.content.Context; 5 import android.view.View; 6 import android.view.ViewGroup; 7 import android.widget.BaseAdapter; 8 import android.widget.GridView; 9 import android.widget.ImageView; 10 11 /** 12 * @author ..0 13 *适配器,继承自BaseAdapter 14 */ 15 public class ImageAdpter extends BaseAdapter { 16 17 //定义Context 18 private Context mContext; 19 20 //定义整型数组,即图片源 21 private int[] mImageIds = 22 { 23 R.drawable.im1, 24 R.drawable.im2, 25 R.drawable.im3, 26 R.drawable.im4, 27 R.drawable.im5, 28 R.drawable.im6, 29 R.drawable.im7 30 }; 31 32 public ImageAdpter (Context c) 33 34 { 35 36 mContext = c; 37 38 } 39 40 41 42 @Override 43 // 获取图片的个数 44 public int getCount() { 45 // TODO Auto-generated method stub 46 return mImageIds.length; 47 } 48 49 // 获取图片在库中的位置 50 @Override 51 public Object getItem(int position) { 52 // TODO Auto-generated method stub 53 return position; 54 } 55 56 // 获取图片ID 57 @Override 58 public long getItemId(int position) { 59 // TODO Auto-generated method stub 60 return position; 61 } 62 63 @Override 64 public View getView(int position, View convertView, ViewGroup parent) { 65 // TODO Auto-generated method stub 66 ImageView imageview = null; 67 68 //如果子条目还没有创建过view 69 if (convertView == null) 70 { 71 72 //给ImageView设置资源 73 imageview = new ImageView(mContext); 74 75 /*动态构建ImageView的布局,用到了控件的setLayoutParams*/ 76 /*其实这个LayoutParams类是用于child view(子视图) 77 向 parent view(父视图)传达自己的意愿的一个东西 78 (孩子想变成什么样向其父亲说明)其实子视图父视图可以简单理解成 79 LayoutParams继承于Android.View.ViewGroup.LayoutParams. 80 LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。 81 假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout中, 82 最好告诉Layout用户期望的布局方式,也就是将一个认可的layoutParams传递进去。 83 可以这样去形容LayoutParams,在象棋的棋盘上,每个棋子都占据一个位置,也就是每 84 个棋子都有一个位置的信息,如这个棋子在4行4列,这里的“4行4列”就是棋子的LayoutParams。 85 86 但LayoutParams类也只是简单的描述了宽高,宽和高都可以设置成三种值: 87 1,一个确定的值; 88 2,FILL_PARENT,即填满(和父容器一样大小); 89 3,WRAP_CONTENT,即包裹住组件就好。*/ 90 GridView.LayoutParams p = new GridView.LayoutParams( 91 85,85); 92 imageview.setLayoutParams(p); 93 94 // 设置显示比例类型 95 imageview.setScaleType(ImageView.ScaleType.FIT_CENTER); 96 } 97 98 //已经创建过view 99 else 100 { 101 imageview = (ImageView)convertView; 102 } 103 imageview.setImageResource(mImageIds[position]); 104 return imageview; 105 } 106 107 }
Acitvity代码:
1 package com.example.gridviewdemoba; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.view.Menu; 6 import android.view.View; 7 import android.widget.AdapterView; 8 import android.widget.AdapterView.OnItemClickListener; 9 import android.widget.GridView; 10 import android.widget.Toast; 11 12 /** 13 * @author sjh 14 *这是一个GridView的Demo,用到了BaseAdpter 15 */ 16 public class GridViewDemoBA extends Activity { 17 18 @Override 19 protected void onCreate(Bundle savedInstanceState) { 20 super.onCreate(savedInstanceState); 21 setContentView(R.layout.activity_grid_view_demo_d); 22 23 //取得GridView对象 24 GridView gridview = (GridView) findViewById(R.id.gv_gridviewdemoba_mygv); 25 26 //添加元素给gridview 27 ImageAdpter adpter = new ImageAdpter(this); 28 gridview.setAdapter(adpter); 29 30 //设置Gallery的背景 31 gridview.setBackgroundResource(R.drawable.bg); 32 gridview.setOnItemClickListener(new OnItemClickListener() { 33 34 @Override 35 public void onItemClick(AdapterView<?> parent, View v, int position, 36 long id) { 37 // TODO Auto-generated method stub 38 Toast.makeText(GridViewDemoBA.this, "你选择了" + (position + 1) + " 号图片", Toast.LENGTH_SHORT).show(); 39 } 40 }); 41 } 42 43 44 45 }