1. 程式人生 > >Android中Menu的基本用法

Android中Menu的基本用法

一、 使用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檔案

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_settings"
        android:orderInCategory="1"
        android:icon="@drawable/home"
        android:title="@string/menu_settings"/>
    <item
        android:id="@+id/menu_about"
        android:orderInCategory="2"
        android:icon="@drawable/mine"
        android:title="@string/menu_about"/>
    <item
        android:id="@+id/menu_quit"
        android:orderInCategory="3"
        android:icon="@drawable/more"
        android:title="@string/menu_quit"/>
    
</menu>

MainActivity.java檔案
package com.example.menutest;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		switch(item.getItemId()){
	       case R.id.menu_about:	       
	           Toast.makeText(MainActivity.this, ""+"關於", Toast.LENGTH_SHORT).show();
	           break;
	       case R.id.menu_settings:
	           
	           Toast.makeText(MainActivity.this, ""+"設定", Toast.LENGTH_SHORT).show();
	           break;
	       case R.id.menu_quit:
	           
	           Toast.makeText(MainActivity.this, ""+"退出", Toast.LENGTH_SHORT).show();
	           break;
	       default:
	    	   break;
	       }
//	       Toast.makeText(MainActivity.this, ""+item.getItemId(), Toast.LENGTH_SHORT).show();
	
		return super.onOptionsItemSelected(item);
	}

}

執行結果:


附:自定義選單的背景參見:http://blog.csdn.net/sodino/article/details/6165132