效果圖:

首先确定的是,裡面有四個元素。每個元素的組合為 圖檔+文字。是以我們先定義一個xml:
/androidui2/res/layout/main_menu_item.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<code><?</code><code>xml</code> <code>version="1.0" encoding="utf-8"?></code>
<code> </code><code>android:layout_width="match_parent"</code>
<code> </code><code>android:layout_height="match_parent"</code>
<code> </code><code>android:orientation="vertical" ></code>
<code> </code><code><</code><code>imageview</code>
<code> </code><code>android:id="@+id/itemimageview"</code>
<code> </code><code>android:layout_width="fill_parent"</code>
<code> </code><code>android:layout_height="wrap_content"</code>
<code> </code><code>android:layout_gravity="center"/></code>
<code> </code><code><</code><code>textview</code>
<code> </code><code>android:id="@+id/itemtextview"</code>
<code> </code><code>android:gravity="center"/></code>
<code></</code><code>linearlayout</code><code>></code>
先在視圖中定義gridview:
/androidui2/res/layout/activity_main.xml
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<code> </code><code>android:paddingbottom="@dimen/activity_vertical_margin"</code>
<code> </code><code>android:paddingleft="@dimen/activity_horizontal_margin"</code>
<code> </code><code>android:paddingright="@dimen/activity_horizontal_margin"</code>
<code> </code><code>android:paddingtop="@dimen/activity_vertical_margin"</code>
<code> </code><code>tools:context=".mainactivity" ></code>
<code> </code><code><</code><code>linearlayout</code>
<code> </code><code>android:layout_width="match_parent"</code>
<code> </code><code>android:layout_height="wrap_content"</code>
<code> </code><code>android:layout_marginleft="12dp"</code>
<code> </code><code>android:layout_marginright="12dp"</code>
<code> </code><code>android:background="@color/white"</code>
<code> </code><code>android:orientation="horizontal"</code>
<code> </code><code>android:gravity="top"></code>
<code> </code>
<code> </code><code><</code><code>gridview</code>
<code> </code><code>android:id="@+id/gridview_main_menu"</code>
<code> </code><code>android:layout_width="fill_parent"</code>
<code> </code><code>android:layout_height="wrap_content"</code>
<code> </code><code>android:columnwidth="90dp"</code>
<code> </code><code>android:stretchmode="columnwidth"</code>
<code> </code><code>android:numcolumns="4"</code>
<code> </code><code>android:horizontalspacing="10dp"</code>
<code> </code><code>android:gravity="center_horizontal"</code>
<code> </code><code>></code>
<code> </code><code></</code><code>gridview</code><code>></code>
<code> </code><code></</code><code>linearlayout</code><code>></code>
<code></</code><code>relativelayout</code><code>></code>
然後activity核心代碼:
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<code>package com.example.androidui2;</code>
<code>import java.util.arraylist;</code>
<code>import java.util.hashmap;</code>
<code>import java.util.list;</code>
<code>import android.os.bundle;</code>
<code>import android.app.activity;</code>
<code>import android.view.menu;</code>
<code>import android.view.view;</code>
<code>import android.widget.adapterview;</code>
<code>import android.widget.gridview;</code>
<code>import android.widget.simpleadapter;</code>
<code>import android.widget.toast;</code>
<code>import android.widget.adapterview.onitemclicklistener;</code>
<code>public class mainactivity extends activity</code>
<code>{</code>
<code> </code><code>private gridview mainmenugridview;</code>
<code> </code><code>private int[] mainmenuimageres = {r.drawable.circle,r.drawable.circle,r.drawable.circle,r.drawable.circle};</code>
<code> </code><code>private string[] mainmenustrs = {"撥号","所有聯系人","使用說明","退出"};</code>
<code> </code>
<code> </code><code>@override</code>
<code> </code><code>protected void oncreate(bundle savedinstancestate)</code>
<code> </code><code>{</code>
<code> </code><code>super.oncreate(savedinstancestate);</code>
<code> </code><code>setcontentview(r.layout.activity_main);</code>
<code> </code><code>mainmenugridview = (gridview)findviewbyid(r.id.gridview_main_menu);</code>
<code> </code>
<code> </code><code>initview();</code>
<code> </code><code>}</code>
<code> </code><code>// init views</code>
<code> </code><code>private void initview()</code>
<code> </code><code>// init main-menu</code>
<code> </code><code>list<</code><code>hashmap</code><code><string, object>> datas = new arraylist<</code><code>hashmap</code><code><string,object>>();</code>
<code> </code><code>int length = mainmenustrs.length;</code>
<code> </code><code>for (int i = 0; i <</code><code>length</code><code>; i++)</code>
<code> </code><code>{</code>
<code> </code><code>hashmap<string, object> map = new hashmap<</code><code>string</code><code>, object>();</code>
<code> </code><code>map.put("itemimageview", mainmenuimageres[i]);</code>
<code> </code><code>map.put("itemtextview", mainmenustrs[i]);</code>
<code> </code><code>datas.add(map);</code>
<code> </code><code>}</code>
<code> </code><code>simpleadapter menuadapter = new simpleadapter(</code>
<code> </code><code>mainactivity.this,datas,</code>
<code> </code><code>r.layout.main_menu_item,</code>
<code> </code><code>new string[]{"itemimageview","itemtextview"},</code>
<code> </code><code>new int[]{r.id.itemimageview,r.id.itemtextview} );</code>
<code> </code><code>mainmenugridview.setadapter(menuadapter);</code>
<code> </code><code>mainmenugridview.setonitemclicklistener(new mainmenuitemonclick());</code>
<code> </code><code>// main menu item on click function</code>
<code> </code><code>public class mainmenuitemonclick implements onitemclicklistener</code>
<code> </code><code>/** arg0 : the adapterview where the click happened </code>
<code> </code><code>* arg1 : the view within the adapterview that was clicked</code>
<code> </code><code>* arg2 : the position of the view in the adapter</code>
<code> </code><code>* arg3 : the row id of the item that was clicked</code>
<code> </code><code>**/</code>
<code> </code><code>public void onitemclick(adapterview<?> arg0, view arg1, int arg2,</code>
<code> </code><code>long arg3)</code>
<code> </code><code>hashmap<</code><code>string</code><code>, object> item = (hashmap<</code><code>string</code><code>, object>)arg0.getitematposition(arg2);</code>
<code> </code><code>if (item.get("itemtextview").equals(mainmenustrs[0]))</code>
<code> </code><code>{</code>
<code> </code><code>toast.maketext(getapplicationcontext(), mainmenustrs[0], </code>
<code> </code><code>toast.length_short).show(); </code>
<code> </code><code>}</code>
<code> </code><code>if (item.get("itemtextview").equals(mainmenustrs[1]))</code>
<code> </code><code>toast.maketext(getapplicationcontext(), mainmenustrs[1], </code>
<code> </code><code>if (item.get("itemtextview").equals(mainmenustrs[2]))</code>
<code> </code><code>toast.maketext(getapplicationcontext(), mainmenustrs[2], </code>
<code> </code><code>if (item.get("itemtextview").equals(mainmenustrs[3]))</code>
<code> </code><code>toast.maketext(getapplicationcontext(), mainmenustrs[3], </code>
<code> </code><code>public boolean oncreateoptionsmenu(menu menu)</code>
<code> </code><code>// inflate the menu; this adds items to the action bar if it is present.</code>
<code> </code><code>getmenuinflater().inflate(r.menu.main, menu);</code>
<code> </code><code>return true;</code>
<code>}</code>
解釋:
定義所需要的 item 數組:
<code>private int[] mainmenuimageres = {r.drawable.circle,r.drawable.circle,r.drawable.circle,r.drawable.circle};</code>
初始化用simpleadapter添加
<code>simpleadapter menuadapter = new simpleadapter(</code>
然後添加動作的時候,我們巧妙的擷取到itemimageview的值進行判斷,然後動作。
<code>hashmap<</code><code>string</code><code>, object> item = (hashmap<</code><code>string</code><code>, object>)arg0.getitematposition(arg2);</code>
gridview 可以作為平面化菜單的好東西。