[Android] GridView的基本使用教學



GridView是一種網格狀的二維視覺元件,將item依照順序放置於網格中顯示,它繼承了AbsListView這個類別,因此不難想像它的使用方式與ListView一樣,都是透過setAdapter的方式將data與View呈現在GridView中。


程式碼說明

1.在Layout XML中建立GridView,設定其外觀屬性,它將會影響item的呈現效果,以下列舉幾個常用的屬性:
(1) numColumns-一列要顯示的item數量
(2) verticalSpacing-列與列之間的距離
(3) horizontalSpacing-行與行之間的距離
(4) columnWidth-設定行的固定寬度

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" >
  <GridView 
    android:id="@+id/image_grid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:numColumns="3"
    android:verticalSpacing="5dp"
    android:horizontalSpacing="5dp"
    android:columnWidth="120dp"
    android:stretchMode="columnWidth"
    android:gravity="center"    
  />
</LinearLayout>

2.建立繼承BaseAdapter類別,有許多需要實作的方法,getView()是其中最重要的,它負責將特定位置的資料轉換為在GridView中呈現的View。

package com.grid;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;

public class GridViewAdapter extends BaseAdapter {
 
Integer[] data={R.drawable.image1,R.drawable.image2,
                R.drawable.image3,R.drawable.image4,
                R.drawable.image5,R.drawable.image6,
                R.drawable.image7,R.drawable.image8};
private Context context;
 
public GridViewAdapter(Context context){
  this.context = context;
}
 
@Override
public int getCount() {
  return data.length;
}

@Override
public Object getItem(int position) {
  return data[position];
}

@Override
public long getItemId(int position) {
  return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  ImageView image;
  if(convertView==null){
    image = new ImageView(context);
    image.setLayoutParams(new GridView.LayoutParams(120, 120));
    image.setScaleType(ScaleType.CENTER_CROP);
  }else{
    image = (ImageView)convertView;
  }
  image.setImageResource(data[position]);
  return image;
}

}

3.執行setAdapter()
package com.grid;

import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;

public class GridViewDemoActivity extends Activity {
    
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
        
  //get grid view reference
  GridView grid = (GridView)findViewById(R.id.image_grid);
  grid.setAdapter(new GridViewAdapter(getApplicationContext()));
}
}

留言

這個網誌中的熱門文章

[Android] layout_weight的妙用-讓View的大小以百分比率顯示(proportionate size)

[Android] 內部儲存體(Internal Storage)的檔案系統讀寫(File I/O)

【海外婚紗】道具行李篇