通過Android提供的NotePad樣本應用,及協助文檔中對菜單的相關描述,現將如何在我們的Androiod應用中定製我們自己的菜單,做一個小結。
一、菜單的產生
對一個Android應用中的每一個螢幕,也就是說,對每一個Activity類,都會擁有一個預設菜單。在Activity類中,定義了幾個與菜單有關的方法,供繼承於Activity類的子類去重載,從而定製我們自己的菜單。這幾個方法為:
public boolean onCreateOptionsMenu(android.view.Menu menu);
public boolean onPrepareOptionsMenu(android.view.Menu menu);
public boolean onOptionsItemSelected(android.view.MenuItem item);
為了產生我們自己的菜單,Android為我們提供了兩個時機點。當在Activity類執行個體啟動時,我們可以通過重載onCreateOptionsMenu()來定製我們的菜單;另外,也可以在菜單每次被調用時,對菜單中的項重建,通過重載onPrepareOptionsMenu來實現。對於第二種方式,由於每次調用時都要重建,對於那些不經常變化的菜單,效率就會比較低。看下面的代碼:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, 0, “功能表項目一”);
menu.add(0, 1, “功能表項目二”);
menu.add(0, 2, “功能表項目三”);
return true;
}
Menu.add()方法第一個參數表示給這個新增的功能表項目分配一個分組號;第二個參數表示給這個新增的功能表項目分配一個唯一標識id;第三個參數為功能表項目的標題。
我們可以通過調用Menu.setItemShown()或者Menu.setGroupShown()方法來顯示或隱藏一些功能表項目。
這裡要注意的一個地方是:功能表項目的顯示順序是按代碼中添加的順序來的,也就是說Menu.add()方法只能在菜單的最後面新增一個功能表項目。另外,第一個參數的分組標識,不會改變功能表項目的顯示順序。
二、響應功能表項目點擊
當菜單顯示出來後,使用者點擊菜單中的某一功能表項目,我們的菜單需要響應這個點擊事件。這個也很簡單,通過重載onOptionsItemSelected()方法來實現,直接上例子:
@Override
public boolean onOptionsItemSelected(Menu.Item item){
switch (item.getId()) {
case 0:
showAlert(”Menu Item Clicked”, “功能表項目一”, “ok”, null, false, null);
return true;
case 1:
showAlert(”Menu Item Clicked”, “功能表項目二”, “ok”, null, false, null);
return true;
case 2:
showAlert(”Menu Item Clicked”, “功能表項目三”, “ok”, null, false, null);
return true;
}
return false;
}
這裡,我們還可以通過調用Item.setAlphabeticShortcut()或Item.setNumericShortcut()方法來增加功能表項目的快速鍵操作。
對響應功能表項目點擊,還有另一個辦法,可以通過實現Runnable類()的一個子類,做為訊息控制代碼來對功能表項目點擊做響應,但這種辦法效率較低,不推薦這麼做。
三、增加子功能表
我們還可以通過調用Menu.addSubMenu()方法,為某個功能表項目添加子功能表,這個方法返回一個SubMenu執行個體,我們可以在這個SubMenu菜單中添加子功能表項。
註:菜單只能有一級子功能表,不支援多級。