Android控件之GridView探究

【轉】http://www.apkbus.com/forum.php?mod=viewthread&tid=2436&extra=page%253D1

GridView是一項顯示二維的viewgroup,可滾動的網格。一般用來顯示多張圖片。
以下模擬九宮圖的實現,當鼠標點擊圖片時會進行相應的跳轉鏈接。
目錄結構
085617h9lpf4q7qlqhvarr.png
main.xml佈局文件,存放GridView控件
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <!--

  3. android:numColumns="auto_fit" ,GridView的列數設置爲自動

  4. android:columnWidth="90dp",每列的寬度,也就是Item的寬度

  5. android:stretchMode="columnWidth",縮放與列寬大小同步

  6. android:verticalSpacing="10dp",兩行之間的邊距,如:行一(NO.0~NO.2)與行二(NO.3~NO.5)間距爲10dp

  7. android:horizontalSpacing="10dp",兩列之間的邊距

  8. -->

  9. <GridView xmlns:android="http://schemas.android.com/apk/res/android"

  10.    android:id="@+id/gridview"

  11.    android:layout_width="fill_parent"

  12.    android:layout_height="fill_parent"

  13.    android:numColumns="auto_fit"

  14.    android:verticalSpacing="10dp"

  15.    android:horizontalSpacing="10dp"

  16.    android:columnWidth="90dp"

  17.    android:stretchMode="columnWidth"

  18.    android:gravity="center"

  19. />

複製代碼



night_item.xml佈局文件,存放顯示控件
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <RelativeLayout

  3.    xmlns:android="http://schemas.android.com/apk/res/android"

  4.    android:layout_height="wrap_content"

  5.    android:paddingBottom="4dip"

  6.    android:layout_width="fill_parent">

  7.    <ImageView android:layout_height="wrap_content"

  8.        android:layout_width="wrap_content"

  9.        android:layout_centerHorizontal="true"

  10.        android:id="@+id/itemImage" >

  11.    </ImageView>

  12.    <TextView android:layout_width="wrap_content"

  13.        android:layout_below="@+id/itemImage"

  14.        android:layout_height="wrap_content"

  15.        android:text="TextView01"

  16.        android:layout_centerHorizontal="true"

  17.        android:id="@+id/itemText">

  18.    </TextView>

  19. </RelativeLayout>

複製代碼



strings.xml
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <resources>

  3.    <string name="hello">Hello World, GvActivity!</string>

  4.    <string name="app_name">九宮圖</string>

  5.    <string name="test_name1">跳轉到TestActivity1</string>

  6.    <string name="test_name2">跳轉到TestActivity2</string>

  7.    <string name="test_name3">跳轉到TestActivity3</string>

  8. </resources>

複製代碼



清單文件
  1. <?xml version="1.0" encoding="utf-8"?>

  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"

  3.      package="com.ljq.gv"

  4.      android:versionCode="1"

  5.      android:versionName="1.0">

  6.    <application android:icon="@drawable/icon" android:label="@string/app_name">

  7.        <activity android:name=".GvActivity"

  8.                  android:label="@string/app_name">

  9.            <intent-filter>

  10.                <action android:name="android.intent.action.MAIN" />

  11.                <category android:name="android.intent.category.LAUNCHER" />

  12.            </intent-filter>

  13.        </activity>

  14.        <activity android:name=".TestActivity1" android:label="@string/test_name1"/>

  15.        <activity android:name=".TestActivity2" android:label="@string/test_name2"/>

  16.        <activity android:name=".TestActivity3" android:label="@string/test_name3"/>

  17.    </application>

  18.    <uses-sdk android:minSdkVersion="7" />


  19. </manifest>

複製代碼



跳轉類TestActivity1、TestActivity2、TestActivity3
  1. package com.ljq.gv;


  2. import android.app.Activity;

  3. import android.os.Bundle;


  4. public class TestActivity1 extends Activity {


  5.    @Override

  6.    public void onCreate(Bundle savedInstanceState) {

  7.        super.onCreate(savedInstanceState);

  8.        //setContentView(R.layout.main);

  9.    }

  10. }


  11. package com.ljq.gv;


  12. import android.app.Activity;

  13. import android.os.Bundle;


  14. public class TestActivity2 extends Activity {


  15.    @Override

  16.    public void onCreate(Bundle savedInstanceState) {

  17.        super.onCreate(savedInstanceState);

  18.        //setContentView(R.layout.main);

  19.    }

  20. }


  21. package com.ljq.gv;


  22. import android.app.Activity;

  23. import android.os.Bundle;


  24. public class TestActivity3 extends Activity {


  25.    @Override

  26.    public void onCreate(Bundle savedInstanceState) {

  27.        super.onCreate(savedInstanceState);

  28.        //setContentView(R.layout.main);

  29.    }

  30. }

複製代碼



類GvActivity
  1. package com.ljq.gv;


  2. import java.util.ArrayList;

  3. import java.util.HashMap;


  4. import android.app.Activity;

  5. import android.content.Intent;

  6. import android.os.Bundle;

  7. import android.view.View;

  8. import android.widget.AdapterView;

  9. import android.widget.GridView;

  10. import android.widget.SimpleAdapter;

  11. import android.widget.Toast;

  12. import android.widget.AdapterView.OnItemClickListener;


  13. public class GvActivity extends Activity {

  14.    private String texts[] = null;

  15.    private int p_w_picpaths[] = null;


  16.    public void onCreate(Bundle savedInstanceState) {

  17.        super.onCreate(savedInstanceState);

  18.        setContentView(R.layout.main);


  19.        p_w_picpaths=new int[]{R.drawable.p1, R.drawable.p2,

  20.                R.drawable.p3, R.drawable.p4,

  21.                R.drawable.p5,R.drawable.p6,

  22.                R.drawable.p7,R.drawable.p8};

  23.        texts = new String[]{ "宮式佈局1", "宮式佈局2",

  24.                "宮式佈局3", "宮式佈局4",

  25.                "宮式佈局5", "宮式佈局6",

  26.                "宮式佈局7", "宮式佈局8"};


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

  28.        ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();

  29.        for (int i = 0; i < 8; i++) {

  30.            HashMap<String, Object> map = new HashMap<String, Object>();

  31.            map.put("itemImage", p_w_picpaths[i]);

  32.            map.put("itemText", texts[i]);

  33.            lstImageItem.add(map);

  34.        }


  35.        SimpleAdapter saImageItems = new SimpleAdapter(this,

  36.                lstImageItem,// 數據源

  37.                R.layout.night_item,// 顯示佈局

  38.                new String[] { "itemImage", "itemText" },

  39.                new int[] { R.id.itemImage, R.id.itemText });

  40.        gridview.setAdapter(saImageItems);

  41.        gridview.setOnItemClickListener(new ItemClickListener());

  42.    }


  43.    class ItemClickListener implements OnItemClickListener {

  44.        /**

  45.         * 點擊項時觸發事件

  46.         *

  47.         * @param parent  發生點擊動作的AdapterView

  48.         * @param view 在AdapterView中被點擊的視圖(它是由adapter提供的一個視圖)。

  49.         * @param position 視圖在adapter中的位置。

  50.         * @param rowid 被點擊元素的行id。

  51.         */

  52.        public void onItemClick(AdapterView<?> parent, View view, int position, long rowid) {

  53.            HashMap<String, Object> item = (HashMap<String, Object>) parent.getItemAtPosition(position);

  54.            //獲取數據源的屬性值

  55.            String itemText=(String)item.get("itemText");

  56.            Object object=item.get("itemImage");

  57.            Toast.makeText(GvActivity.this, itemText, Toast.LENGTH_LONG).show();


  58.            //根據圖片進行相應的跳轉

  59.            switch (p_w_picpaths[position]) {

  60.            case R.drawable.p1:

  61.                startActivity(new Intent(GvActivity.this, TestActivity1.class));//啓動另一個Activity

  62.                finish();//結束此Activity,可回收

  63.                break;

  64.            case R.drawable.p2:

  65.                startActivity(new Intent(GvActivity.this, TestActivity2.class));

  66.                finish();

  67.                break;

  68.            case R.drawable.p3:

  69.                startActivity(new Intent(GvActivity.this, TestActivity3.class));

  70.                finish();

  71.                break;

  72.            }


  73.        }

  74.    }

  75. }

複製代碼



運行結果
085612zgmozm1te2gyc2r3.png

分類: android常用控件
標籤: android GridView


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章