为介绍如何使用适配器可以动态地插入视图,用适配器读取建筑布局。
例子
在本教程中,您将创建一个图像缩略图网格。当选择项目时,会显示图片的位置。
1开始一个新项目命名为hellogridview。
2找一些你想使用的照片,或者下载这些图片。保存图像文件到工程的res/drawable/目录。
3打开res/layout/ main.xml文件并插入以下:
<?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="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
这个控件将填满整个屏幕。属性已经说的很明确了。关于有效的属性的更多信息,参见GridView的参考。
打开 hellogridview.java为 oncreate()方法插入下面代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
}
在main.xml布局设置的内容来看,GridView从布局捕获findViewById(int)的setadapter()方法建立自定义适配器(图片适配器),作为所有项目将显示在网格中的源。
下一步需要创建的图片适配器。
实际上,网格中的一个项目时,该方法是通过一个新的adapterview.onitemclicklistener setonitemclicklistener()。
这个匿名的实例定义了显示索引位置的onitemclick()回调方法(零基础)的选定项(在真实的场景中,位置可以获得全尺寸的图像的其他任务)。
创建一个新的类称为延伸baseadapter图片适配器:
public class ImageAdapterextends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
// references to our images
private 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()是不言自明的。
通常,getitem(int)应该返回在适配器中指定位置的实际对象,但它的这个例子忽略。
同样,getitemid(int)应该返回该项的行ID,但在这里不需要用到。
第一种方法是必要的getview()。此方法创建一个新的角度为每个图像添加到图片适配器。
当这个被调用时,一个视图被传递,通常是一个回收的对象(至少在这个被调用一次),所以有一个检查,看看是否该对象是空的。
如果它是空的,一个ImageView实例化和配置所需的性能,图像演示:
setlayoutparams(ViewGroup。LayoutParams)设置的角度保证了高度和宽度,无论几何体的大小,每个图像缩放和裁剪以适应这些尺寸,适当。
setscaletype(ImageView。秤类型)宣称,图像应出现向中心(如果需要)。
setpadding(int,int,int,int)定义了各方的填充。(注意,如果图像具有不同的长宽比,然后少填充会导致更多的裁剪的图像如果不匹配给定尺寸的图片。)
如果视图通过getview()不为空,那么当地ImageView是回收的视图对象初始化。
在getview()方法结束位置的整数,通过使用的方法是选择从mthumbids阵列的图像,这是设置为ImageView的图像资源。
剩下的就是定义drawable资源mthumbids阵列。
运行应用程序。
尝试用GridView和调整性能ImageView元素的行为。例如,而不是使用setlayoutparams(ViewGroup。LayoutParams),试着用setadjustviewbounds(布尔)。