Android控件之GridView


Android控件之GridView

  


 1 GridView介紹

GridView是網格視圖,它按照行列的方式來顯示內容的。常用於九宮格內容顯示。

1.1 GridView屬性說明

android:columnWidth
設置列的寬度。

android:gravity
設置此組件中的內容在組件中的位置。可選的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical可以多選,用“|”分開。

android:horizontalSpacing
兩列之間的間距。

android:numColumns
設置列數。取值有2種。(01), 可以設置為數字,比如:"2"表示有兩列。(02),可以設置為“auto_fit”,表示根據“屏幕寬度”和“GridView寬度”來動態匹配。

android:stretchMode
縮放模式。取值有4種。
(01) none。 禁止縮放。
(02) spacingWidth。 所有列之間的間距都會縮放。
(03) columnWidth。每一列都會縮放。注意比較和spacingWidth之間的區別;一個是縮放“列與列之間的間距”,另一個是縮放“整個列”。
(04) spacingWidthUniform。通過的縮放列。

android:verticalSpacing
兩行之間的間距。

 

 


2 GridView示例

創建一個activity,包含一個GridView。GridView包含9格,每一個格子包含“圖片”和“文本”2部分。點擊每一個格子,顯示一個Toast提示語。

SimpleGridViewTest.java代碼:

package com.example.simplegridviewtest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

/**
 * @desc GridView的實例。
 *       GridView包含9格,每一個格子包含“圖片”和“文本”2部分。點擊每一個格子,顯示一個Toast提示語。
 * 
 * @author skywang
 *
 */
public class SimpleGridViewTest extends Activity implements AdapterView.OnItemClickListener{
    private GridView mGridView;
    private String IMAGE_ITEM = "imgage_item";
    private String TEXT_ITEM = "text_item";
    private String[] arrText = new String[]{ 
            "Picture 1", "Picture 2", "Picture 3", 
            "Picture 4", "Picture 5", "Picture 6",
            "Picture 7", "Picture 8", "Picture 9"
            };
    private int[] arrImages=new int[]{
            R.drawable.p1, R.drawable.p2, R.drawable.p3, 
            R.drawable.p4, R.drawable.p5, R.drawable.p6, 
            R.drawable.p7, R.drawable.p8, R.drawable.p9
            };
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.simple_grid_view_test);

        mGridView = (GridView) findViewById(R.id.gridview);

        SimpleAdapter saImageItems = new SimpleAdapter(this, 
                getGridViewData(),
                R.layout.grid_view_item,
                new String[] { IMAGE_ITEM, TEXT_ITEM },
                new int[] { R.id.itemImage, R.id.itemText });
        // 設置GridView的adapter。GridView繼承於AbsListView。
        mGridView.setAdapter(saImageItems);
        mGridView.setOnItemClickListener(this);
    }
    
    /**
     * 獲取GridView的數據
     */
    private List<HashMap<String, Object>> getGridViewData() {
        List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
        
        for (int i=0; i<9; i++) {
            HashMap<String, Object> map = new HashMap<String, Object>(); 
            map.put(IMAGE_ITEM, arrImages[i]);
            map.put(TEXT_ITEM, arrText[i]);
            list.add(map);
        }
        
        return list;
    }

    /**
     * GridView的點擊回調函數
     * 
     * @param adapter  -- GridView對應的dapterView
     * @param view     -- AdapterView中被點擊的視圖(它是由adapter提供的一個視圖)。
     * @param position -- 視圖在adapter中的位置。
     * @param rowid    -- 被點擊元素的行id。
     */
    @Override
    public void onItemClick(AdapterView<?> adapter, View view, int position, long rowid) {

        // 根據元素位置獲取對應的值
        HashMap<String, Object> item = (HashMap<String, Object>) adapter.getItemAtPosition(position);

        String itemText=(String)item.get(TEXT_ITEM);
        Object object=item.get(IMAGE_ITEM);
        Toast.makeText(this.getApplicationContext(), "You Select "+itemText, Toast.LENGTH_SHORT).show();
    }

}

layout布局文件(simple_grid_view_test.xml)代碼:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".SimleGridViewTest" >

    <GridView 
        android:id="@+id/gridview"
        android:layout_width="match_parent" 
        android:layout_height="match_parent"
        android:numColumns="3"
        android:verticalSpacing="4dip"
        android:horizontalSpacing="4dip"
        android:columnWidth="90dip"
        android:gravity="center" />    

</RelativeLayout>

GridView的每個格子對應的layout布局文件(grid_view_item.xml)代碼:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent" 
    android:layout_width="match_parent">
    
    <ImageView
        android:id="@+id/itemImage"
        android:layout_width="160dip"
        android:layout_height="120dip"
        android:layout_centerHorizontal="true"
        android:scaleType="fitXY" />
    
    <TextView 
        android:id="@+id/itemText" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_below="@+id/itemImage"
        android:layout_centerHorizontal="true" 
        android:text="TextView01"/>
    
</RelativeLayout>

點擊下載:源代碼

運行效果圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM