Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 開發入門 >> Android之加入菜單 (Menu)

Android之加入菜單 (Menu)

編輯:開發入門

在進一步學習 Intent 與 Activity 之前,我們先來完善我們的應用程序。 在前幾章中,我們把 "openOptionsDialog" 這個用來彈出對話框的函數,放進 "calcBMI" 這個按鈕元件的 "OnClickListener" 方法中。現 在,我們要把 "openOptionsDialog" 移出 "OnClickListener" 方法,改成按下 "Menu" 鍵後,跳出一個菜單列 (Menu Bar) 。當我們點擊菜單列中的選項後,才彈出 "openOptionsDialog" 的對話框。 
完整的程序碼如下: 
代碼 : 
1  protected static final int MENU_ABOUT = Menu.FIRST;

2  protected static final int MENU_Quit = Menu.FIRST+1;

3

4  @Override

5  public boolean onCreateOptionsMenu(Menu menu) {

6      super.onCreateOptionsMenu(menu);

7      menu.add(0, MENU_ABOUT, 0, " 關於 ...");

8      menu.add(0, MENU_Quit, 0, " 結束 ");

9      return true;

10 }

11

12 public boolean onOptionsItemSelected(MenuItem item)

13 {

14     super.onOptionsItemSelected(item);

15     switch(item.getItemId()){

16          case MENU_ABOUT:

17              openOptionsDialog();

18              break;

19         case MENU_Quit:

20              finish();

21             break;

22       }

23       return true;

24 }

 

每個菜單都包含兩個部分: 
1. 建立菜單 
2. 處理選項動作 
"onCreateOptionsMenu" 函數即菜單列的主體。在 android 機器或模擬器上按下硬體的 "Menu"( 菜單 ) 鍵,所彈出的菜單列即是靠 "onCreateOptionsMenu" 函數來定義。當我們在 Activity 中定義了 "onCreateOptionsMenu" 之後,按下 "Menu"( 菜單 ) 鍵時,就會彈出相對應的菜單列。 
當我們在 android 應用程序的菜單列上選擇了相應的選項後,則是依賴 "onOptionsItemSelected" 函數,來負責處理菜單列中各選項所個別對應的動作。 
在上面的程序裡,我們定義了 " 關於 ..." 與 " 結束 " 兩個菜單列中的選項。我們分部分講解如下: 
建立菜單 
在 "onCreateOptionsMenu" 函數中,我們定義了兩個菜單列中的選項。 分行講解如下: 
代碼 : 
@Override

public boolean onCreateOptionsMenu(Menu menu) {

super.onCreateOptionsMenu(menu);

 return true;

}

"onCreateOptionsMenu" 這個函數是菜單列的主體,它是一個 "public"( 公開 ) 的函數。函數傳入一個 "Menu" (菜單)型別的 "menu" 參數。 "boolean" 則表示 函數的返回值必須為 "boolean" 型別的值。因此在函數最後,我們提供函數一個返回值 "true" 。 "@Override" 表示我們要完全重寫掉已定 義在 "Activity" 類別中的這個函數。 
基於與 onCreate 函數一樣的原因,因為我們把菜單列原本的動作覆載 (Override) 掉了,因此在撰寫我們自己的內容前,加上一句 "super.onCreateOptionsMenu(menu)" 敘述,用來呼 叫 "onCreateOptionsMenu" 函數執行預設的動作。 
代碼 : 
menu.add(0, MENU_ABOUT, 0, " 關於 ...");

menu.add(0, MENU_Quit, 0, " 結束 ");

 

android 每個頁面對應到一個 Activity ,每個 Activity 都有一個獨立的菜單列。對傳入的 "menu" 參數作處理就能改變菜單列的內容。 
我們看到,增加一個菜單列中選項的格式如下: 
menu.add(0, 識別符號 (identifer), 0, 字串或資源識別符號 );

最後一欄 " 字串或資源識別符號 " 就是顯示在螢幕上的敘述。 而 " 識別符號 " 的目的則是作為這個選項的標籤,以供後續處理選項動作時,更容易辨認出所對應的選項。 
代碼 : 
protected static final int MENU_ABOUT = Menu.FIRST;

protected static final int MENU_Quit = Menu.FIRST+1;

 

我們看到 MENU_ABOUT 識別符號的定義,是一個固定的常數型別( static final int )。 "Menu.FIRST" 則代表識別菜單開頭的數字,當然我們也可以把這 "Menu.FIRST" 代號直接用任意數字替換,看看程序會發生什麽事。 
處理選項動作 
在 "OptionsItemSelected" 函數中,我們分行講解如下: 
代碼 : 
public boolean onOptionsItemSelected(MenuItem item)

{

super.onOptionsItemSelected(item);

return true;

}

 

"onOptionsItemSelected" 這個函數是處理所有選項的主體,和 "onCreateOptionsMenu" 函數相同,也是一個 "public"( 公開 ) 的函 數。 "onOptionsItemSelected" 函數傳入了一個 "MenuItem" (選項)型別的 "item" 參數。 "boolean" 表示函數的 返回值必須為 "boolean" 型別的值。因此在函數最後,我們提供函數一個返回 值 "true" 。 "super.onOptionsItemSelected(item);" 表示我們要先執行已定義在 "Activity" 類別中原本 的 "onOptionsItemSelected" 函數內容,後面再接著執行我們為此函數新定義的動作。 
代碼 : 
switch(item.getItemId()){

我們可以用 "item.getItemId()" 函數來取得在螢幕上選取的選項所對應的識別符號代碼 (identifer) 。 
switch( 識別符號代碼 ){

        ....

    }

在 swith 敘述中,我們根據從 "item.getItemId()" 函數取得的識別符號代碼判斷, 根據選到的識別符號代碼,作相應處理。 
代碼 : 
case MENU_ABOUT:

        openOptionsDialog();

        break;

    case

        ....

        break;

在 "onOptionsItemSelected" 函數中收到 "MENU_ABOUT" 識別符號時,我們呼叫 "openOptionsDialog" 函數來彈出對話框。 
代碼 : 
case MENU_Quit:

        finish();

        break;

在 "onOptionsItemSelected" 函數中收到 "MENU_Quit" 識別符號時,我們呼叫 android 內建的 "finish" 函數來關閉這個 Activity 。因為我們的 "BMI" 應用程序只由一個 "Bmi"Activity 組成,所以當我們呼叫 "finish" 函數來關閉 "Bmi" 這個 Activity ,就等於直接關閉了這個 "BMI" 應用程序。 
而事實上, 在 Android 平台上,無論是開發者或是使用者,都不需要自己來關閉 Activity 。 因為 Android 虛擬機 (Dalvik) 接手了什麽時候 Activity 該啟動或關閉的工作。整個 android Activity 的運作流程,將在後續章節中作講解

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved