1. 程式人生 > >Android官方文件—User Interface(Layouts)(Grid View)

Android官方文件—User Interface(Layouts)(Grid View)

Grid View

GridView是一個ViewGroup,它以二維可滾動網格顯示專案。使用ListAdapter將網格項自動插入到佈局中。

有關如何使用介面卡動態插入檢視的介紹,請閱讀使用介面卡構建佈局。

示例


在本教程中,您將建立一個影象縮圖網格。選擇專案後,Toast訊息將顯示影象的位置。

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="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參考。

4.開啟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佈局後,將使用findViewById(int)從佈局中捕獲GridView。然後,setAdapter()方法將自定義介面卡(ImageAdapter)設定為要在網格中顯示的所有專案的源。 ImageAdapter將在下一步中建立。

要在單擊網格中的專案時執行某些操作,將向setOnItemClickListener()方法傳遞新的AdapterView.OnItemClickListener。此匿名例項定義onItemClick()回撥方法以顯示Toast,該Toast顯示所選項的索引位置(從零開始)(在實際場景中,該位置可用於獲取其他任務的完整大小的影象)。

5.建立一個名為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的每個影象建立一個新檢視。當呼叫它時,傳入一個View,它通常是一個迴圈物件(至少在呼叫一次之後),所以檢查物件是否為null。如果為null,則會例項化ImageView併為其配置所需的影象呈現屬性:

  • setLayoutParams(ViewGroup.LayoutParams)設定檢視的高度和寬度 - 這可確保無論可繪製的大小如何,每個影象都會根據需要調整大小並裁剪以適合這些尺寸。
  • setScaleType(ImageView.ScaleType)宣告應該向中心裁剪影象(如有必要)。
  • setPadding(int,int,int,int)定義所有邊的填充。 (請注意,如果影象具有不同的寬高比,那麼如果影象與給予ImageView的尺寸不匹配,則較少的填充將導致更多的影象裁剪。)

如果傳遞給getView()的View不為null,則使用迴圈的View物件初始化本地ImageView。

在getView()方法的末尾,傳遞給方法的位置整數用於從mThumbIds陣列中選擇一個影象,該陣列被設定為ImageView的影象資源。

剩下的就是定義可繪製資源的mThumbIds陣列。

6.執行該應用程式。

嘗試通過調整其屬性來嘗試GridView和ImageView元素的行為。例如,不要使用setLayoutParams(ViewGroup.LayoutParams),而是嘗試使用setAdjustViewBounds(boolean)。