Android中的菜單分為選項菜單(OptionMenu)和操作功能表(Context Menu)。通常使用菜單資源檔建立菜單。菜單資源檔通常放置在res\menu目錄下,這個目錄預設情況下是不存在的,需要我們自己建立該目錄。菜單資源的根項目通常是<menu></menu>標記,在該標記中可以包含兩種子項目:
1、<item></item>標記,用於定義功能表項目。如果某個功能表項目中還包括子功能表,可以通過在該功能表項目中再包含<menu></menu>標記來實現。
2、<group></group>標記,用於將多個<item></item>標記定義的菜單封裝成一個菜單組。
一、菜單的建立步驟
1、 選項菜單
當使用者單擊功能表按鈕時,彈出的菜單就是選項菜單,建立選項菜單的步驟如下:
(1) 重寫Activity的onCreateOptionsMenu()方法。在該方法中,首先建立一個用於解析菜單資源檔的MenuInflater對象,然後調用該對象的inflate()方法解析一個菜單資源檔,並把解析後的菜單儲存在menu中。關鍵代碼如下:
[java]
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater=new MenuInflater(this); //執行個體化一個MenuInflater對象
inflater.inflate(R.menu.optionmenu, menu); //解析菜單檔案
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater=new MenuInflater(this); //執行個體化一個MenuInflater對象
inflater.inflate(R.menu.optionmenu, menu); //解析菜單檔案
return true;
}
(2) 重寫onOptionsItemSelected()方法,用於當菜單被選擇時,做出相應處理。關鍵代碼舉例如下:
[java]
// Called when an options item is clicked
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_setting:
Log.d(TAG, "menu item setting is selected.");
startActivity(new Intent(this, Settings.class));
break;
case R.id.menu_history:
Log.d(TAG, "menu item history is selected.");
startActivity(new Intent(this, History.class));
break;
case R.id.menu_about:
Log.d(TAG, "menu item about is selected.");
break;
}
return true;
}
// Called when an options item is clicked
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_setting:
Log.d(TAG, "menu item setting is selected.");
startActivity(new Intent(this, Settings.class));
break;
case R.id.menu_history:
Log.d(TAG, "menu item history is selected.");
startActivity(new Intent(this, History.class));
break;
case R.id.menu_about:
Log.d(TAG, "menu item about is selected.");
break;
}
return true;
}
2、 操作功能表
當使用者在某個控制項上長時間按住不放,這時彈出的菜單就是操作功能表。建立操作功能表的步驟如下:
(1)、在Activity的onCreate()方法中註冊操作功能表,例如,為文字框組件註冊操作功能表(也就是說在按住該文字框時,才顯示操作功能表),可以使用下面的代碼,:
[java]
TextView tv = (TextView)findViewById(R.id.textView);
registerForContextMenu(tv);
TextView tv = (TextView)findViewById(R.id.textView);
registerForContextMenu(tv);
(2)、重寫Activity的onCreateContextMenu()方法,在該方法中,首先建立一個用於解析菜單資源的MenuInflater對象,然後調用該對象的inflate()方法解析菜單資源檔,並把解析後的菜單儲存在menu中,最後為菜單頭設定表徵圖和標題。關鍵代碼如下:
[java]
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflator=new MenuInflater(this); //執行個體化一個MenuInflater對象
inflator.inflate(R.menu.contextmenu, menu); //解析菜單檔案
menu.setHeaderIcon(R.drawable.ic_launcher); //為菜單頭設定表徵圖
menu.setHeaderTitle("選擇顏色:"); //為菜單頭設定標題
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflator=new MenuInflater(this); //執行個體化一個MenuInflater對象
inflator.inflate(R.menu.contextmenu, menu); //解析菜單檔案
menu.setHeaderIcon(R.drawable.ic_launcher); //為菜單頭設定表徵圖
menu.setHeaderTitle("選擇顏色:"); //為菜單頭設定標題
}
(3)、重寫onContextItemSelected()方法,用於當菜單被選擇時,做出相應處理。關鍵代碼如下:
[java]
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.color1: //當選擇紅顏色時
tv.setTextColor(Color.rgb(255, 0, 0));
break;
case R.id.color2: //當選擇綠顏色時
tv.setTextColor(Color.rgb(0, 255, 0));
break;
default:
tv.setTextColor(Color.rgb(255, 255, 255));
}
return true;
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.color1: //當選擇紅顏色時
tv.setTextColor(Color.rgb(255, 0, 0));
break;
case R.id.color2: //當選擇綠顏色時
tv.setTextColor(Color.rgb(0, 255, 0));
break;
default:
tv.setTextColor(Color.rgb(255, 255, 255));
}
return true;
}