轉自:http://blog.csdn.net/yuzhongchun/article/details/8956256
一、 使用xml定義Menu
菜單資源文件必須放在res/menu目錄中。菜單資源文件必須使用<menu>標簽作為根節點。除了<menu>標簽外,還有另外兩個標簽用於設置菜單項和分組,這兩個標簽是<item>和<group>。
<menu>標簽沒有任何屬性,但可以嵌套在<item>標簽中,表示子菜單的形式。不過<item>標簽中不能再嵌入<item>標簽。
1.<item>標簽的屬性含義如下:
Id:表示菜單項的資源ID
menuCategory:同種菜單項的種類。該屬性可取4個值:container、system、secondary和alternative。通過menuCategroy屬性可以控制菜單項的位置。例如將屬性設為system,表示該菜單項是系統菜單,應放在其他種類菜單項的后面。
orderInCategor:同種類菜單的排列順序。該屬性需要設置一個整數值。例如menuCategory屬性值都為system的3個菜單項(item1、item2和item3)。將這3個菜單項的orderInCategory屬性值設為3、2、1,那么item3會顯示在最前面,而item1會顯示在最后面。
title:菜單項標題(菜單項顯示的文本)
titleCondensed:菜單項的短標題。當菜單項標題太長時會顯示該屬性值
icon:菜單項圖標資源ID
alphabeticShortcut:菜單項的字母快捷鍵
numericShortcut:菜單項的數字快捷鍵
checkable:表示菜單項是否帶復選框。該屬性可設計為true或false
checked:如果菜單項帶復選框(checkable屬性為true),該屬性表示復選框默認狀態是否被選中。可設置的值為true或false
visible:菜單項默認狀態是否可視
enable:菜單項默認狀態是否被激活
2.<group>標簽的屬性含義如下:
id:表示菜單組的ID
menuCategory:與<item>標簽的同名屬性含義相同。只是作用域為菜單組
orderInCategory:與<item>標簽的同名屬性含義相同。只是作用域為菜單組
checkableBehavior:設置該組所有菜單項上顯示的選擇組件(CheckBox或Radio Button)。如果將該屬性值設為all,顯示CheckBox組件;如果設為single,顯示Radio Button組件;如果設為none,顯示正常的菜單項(不顯示任何選擇組件)。要注意的是,Android SDK官方文檔在解釋該屬性時有一個筆誤,原文是:
Whether the items are checkable. Valid values: none, all(exclusive/radiobuttons), single(non-exclusive/checkboxes).
相反了,正確應該是
all(non-exclusive/checkboxes),single(exclusive/radiobuttons).
visible:表示當前組中所有菜單項是否顯示。該屬性可設置的值是true或false
enable:表示當前組中所有菜單項是否被激活。該屬性可設置的值是true或false
3.具體使用
在代碼中使用
public boolenonCreateOptionsMenu(Menu menu){
MenuInflatemenuInflate = getMenuInflate();
menuInflate.inflate(R.menu.option_menu,menu);
returntrue;
}
二、使用代碼定義Menu
public boolean onCreateOptionsMenu(Menu menu){
// 方法一,用代碼構建
menu.add(Menu.NONE, Menu.NONE, 1, "菜單1");
menu.add(Menu.NONE, Menu.NONE, 2, "菜單2");
menu.add(Menu.NONE, Menu.NONE, 3, "菜單3");
menu.add(Menu.NONE, Menu.NONE, 4, "菜單4");
menu.add(Menu.NONE, Menu.NONE, 5, "菜單5");
menu.add(Menu.NONE, Menu.NONE, 6, "菜單6");
return true;
}
三、菜單響應
重寫onOptionsItemSelected(MenuItem item)這個方法就可以做響應的操作了。
四、實例
res/menu下的activity_main.xml文件

1 <menu xmlns:android="http://schemas.android.com/apk/res/android" > 2 3 <item 4 android:id="@+id/menu_settings" 5 android:orderInCategory="1" 6 android:icon="@drawable/home" 7 android:title="@string/menu_settings"/> 8 <item 9 android:id="@+id/menu_about" 10 android:orderInCategory="2" 11 android:icon="@drawable/mine" 12 android:title="@string/menu_about"/> 13 <item 14 android:id="@+id/menu_quit" 15 android:orderInCategory="3" 16 android:icon="@drawable/more" 17 android:title="@string/menu_quit"/> 18 19 </menu>
MainActivity.java文件

1 package com.example.menutest; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.view.Menu; 6 import android.view.MenuItem; 7 import android.widget.Toast; 8 9 public class MainActivity extends Activity { 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 } 16 17 @Override 18 public boolean onCreateOptionsMenu(Menu menu) { 19 // Inflate the menu; this adds items to the action bar if it is present. 20 getMenuInflater().inflate(R.menu.activity_main, menu); 21 return true; 22 } 23 24 @Override 25 public boolean onOptionsItemSelected(MenuItem item) { 26 // TODO Auto-generated method stub 27 switch(item.getItemId()){ 28 case R.id.menu_about: 29 Toast.makeText(MainActivity.this, ""+"關於", Toast.LENGTH_SHORT).show(); 30 break; 31 case R.id.menu_settings: 32 33 Toast.makeText(MainActivity.this, ""+"設置", Toast.LENGTH_SHORT).show(); 34 break; 35 case R.id.menu_quit: 36 37 Toast.makeText(MainActivity.this, ""+"退出", Toast.LENGTH_SHORT).show(); 38 break; 39 default: 40 break; 41 } 42 // Toast.makeText(MainActivity.this, ""+item.getItemId(), Toast.LENGTH_SHORT).show(); 43 44 return super.onOptionsItemSelected(item); 45 } 46 47 }
運行結果: