Android API Guides---Grid View

来源:互联网 发布:mac视网膜高清壁纸 编辑:程序博客网 时间:2024/06/06 01:15

Grid View

GridView的是显示在一个二维,滚动栅格项的ViewGroup。网格项目自动插入使用ListAdapter布局。
介绍,你怎么能动态插入使用适配器的看法,阅读与适配器建筑平面布置。



在本教程中,您将创建图像缩略图的网格。当选择了一个项目时,举杯消息将显示图像的位置。
启动一个名为GridView控件你好新项目。
找到了一些照片,你想使用或下载这些样本图像。图像文件保存到项目的RES /绘制/目录下。
打开RES /布局/ 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="match_parent"    android:layout_height="match_parent"    android:columnWidth="90dp"    android:numColumns="auto_fit"    android:verticalSpacing="10dp"    android:horizontalSpacing="10dp"    android:stretchMode="columnWidth"    android:gravity="center"/>
这将GridView的填充整个屏幕。属性是相当自我解释。有关有效属性的详细信息,请参阅在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()方法,然后设置一个定制适配器(ImageAdapter)作为源对要显示网格中的所有项目。该ImageAdapter在下一步骤中创建。
做一些事情被点击网格中的项目时,该setOnItemClickListener()方法传递一个新的AdapterView.OnItemClickListener。该匿名实例定义的onItemClick()回调方法来显示显示的索引位置敬酒(从零开始)所选择的项目(在真实的场景中,位置可能被用于获取完整图像一些其他任务)。
创建一个名为ImageAdapter新类,扩展了BaseAdapter:

public class ImageAdapter extends 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()。这种方法创建添加到ImageAdapter每个图像的新景观。如果这就是所谓的,视图是传递,这通常是一个循环对象(至少在此之后被称为一次),所以有一个检查,看看是否对象为null。如果为null,一个ImageView的实例化,并与图像呈现所需的属性进行配置:
setLayoutParams(ViewGroup.LayoutParams)设置的高度和宽度显示,这样可以保证,无论绘制的大小,每个图像的尺寸并裁剪以适合这些尺寸,适当。
setScaleType(ImageView.ScaleType)宣布,图像应朝向中心(如有必要)进行裁剪。
setPadding(INT,INT,INT,INT)定义了各方的填充。 (注意的是,如果图像具有不同的纵横比,则较少的填充会导致图像的更裁剪,如果它不匹配,给予的ImageView的尺寸。)
如果传递给getView()视图不为空,那么本地的ImageView被初始化回收View对象。
在getView()方法的结束时,位置整数传递到用于选择从mThumbIds阵列,其被设置为用于所述ImageView的图像资源的图像的方法。
所有剩下的就是定义绘图资源的mThumbIds数组。
运行该应用程序。
尝试通过调整它们的属性与GridView和ImageView的元素的行为实验。例如,而不是使用setLayoutParams(ViewGroup.LayoutParams),请尝试使用setAdjustViewBounds(布尔)。

0 0
原创粉丝点击