一、概述
Menu,簡單來理解就是當你按下手機的“menu”鍵時所彈出來的視窗,它被廣泛應用著,幾乎在每個應用中都有它的身影。
二、要求
用兩種方式實現菜單功能。
三、實現
建立工程MyMenu,修改/res/layout/main.xml檔案,主要是修改了裡面的TextView,完整的main.xml檔案如下:
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:orientation="vertical" >
6
7 <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="這是一個菜單測試程式"
11 android:gravity="center_horizontal"
12 />
13
14 </LinearLayout>
接著,修改MyMenuActivity.java檔案,主要是覆寫了onCreateOptionsMenu()和onOptionsItemSelected()這兩個方法,在onCreateOptionsMenu()方法裡增加7個選項,比較簡單,完整的內容如下:
1 package com.nan.menu;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.Menu;
6 import android.view.MenuItem;
7 import android.widget.Toast;
8
9 public class MyMenuActivity extends Activity
10 {
11 /** Called when the activity is first created. */
12 @Override
13 public void onCreate(Bundle savedInstanceState)
14 {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.main);
17
18 }
19
20 @Override
21 //當"menu"按鈕被按下時執行這個函數
22 public boolean onCreateOptionsMenu(Menu menu)
23 {
24 menu.add(0, 0, Menu.NONE, "菜單").setIcon(android.R.drawable.btn_star);
25 menu.add(0, 1, Menu.NONE, "菜單").setIcon(android.R.drawable.btn_star);
26 menu.add(0, 2, Menu.NONE, "菜單").setIcon(android.R.drawable.btn_star);
27 menu.add(0, 3, Menu.NONE, "菜單").setIcon(android.R.drawable.btn_star);
28 menu.add(0, 4, Menu.NONE, "菜單").setIcon(android.R.drawable.btn_star);
29 menu.add(0, 5, Menu.NONE, "菜單").setIcon(android.R.drawable.btn_star);
30 menu.add(0, 6, Menu.NONE, "菜單").setIcon(android.R.drawable.btn_star);
31
32 return super.onCreateOptionsMenu(menu);
33 }
34
35
36 //當菜單中某項被選中時執行這個函數
37 @Override
38 public boolean onOptionsItemSelected(MenuItem item)
39 {
40 switch(item.getItemId())
41 {
42 case 0:displayToast("第0項被選中");break;
43 case 1:displayToast("第1項被選中");break;
44 case 2:displayToast("第2項被選中");break;
45 case 3:displayToast("第3項被選中");break;
46 case 4:displayToast("第4項被選中");break;
47 case 5:displayToast("第5項被選中");break;
48 case 6:displayToast("第6項被選中");break;
49
50 }
51
52 return super.onOptionsItemSelected(item);
53 }
54
55 /*
56 @Override
57 public boolean onCreateOptionsMenu(Menu menu)
58 {
59 MenuInflater inflater = getMenuInflater();
60 inflater.inflate(R.menu.menu, menu);
61 return super.onCreateOptionsMenu(menu);
62 }
63
64 @Override
65 public boolean onOptionsItemSelected(MenuItem item)
66 {
67 int item_id = item.getItemId();
68
69 switch(item_id)
70 {
71 case R.id.mlist:
72 {}
73 }
74 return super.onOptionsItemSelected(item);
75 }
76 */
77
78
79
80 //顯示Toast函數
81 private void displayToast(String s)
82 {
83 Toast.makeText(this, s, Toast.LENGTH_LONG).show();
84 }
85
86 }
注釋那段內容後面再解釋,先運行這個程式看看:
點擊"menu"按鍵,可以看到彈出了一個菜單視窗,如下:
接著,隨便點擊一項,效果如下:
好了。這是實現的一種方法,第二種實現方法就是把上面程式中的第55~76行的注釋取消掉,然後將第19~54行加上注釋,重新運行程式,OK。
附:
可以看到用第一種方法建立菜單最多隻可以顯示5項,第6項變成“more”,其他選項就在"more"裡面,而第二種方法則可以用我們自己定義的布局來作為菜單選項,那麼就變得靈活多了。