星期六, 10月 01, 2011

菜單資源文件

Android應用程式學習筆記

Menu

任何視圖組件的創見方式都有兩種:一種通過在布局文件中聲明創建;另一種通過在程式碼中創建。菜單也不例外,可以在資源文件中聲明,也可以在程式碼中創建。

Android中菜單分為選擇菜單(Option menu)、上下文菜單(Context menu)、子菜單(Submenu),都可以在XML文件中聲明定義,在程式碼中通過MenuInflater類別使用。


菜單資源文件的定義

菜單資源文件也是一個XML文件,該菜單文件位在專案的res/menu/my_menu.xml目錄下。通過R.menu.my_menu.xml的方式引用。

典型菜單資源文件的結構是這樣的:
<menu>根標籤,在<menu>根標籤裡面巢狀放入<item>和<group>子標籤,<item>標籤可以在巢狀放入<menu>標籤形成子菜單。

<menu>標籤沒有屬性,它包含<item>和<group>子標籤。

<group>表示一個菜單組,相同菜單組可以一起設置其屬性,例如,visible、enabled、checkable等。<group>屬性如下:

  • id-唯一標示該菜單組的引用id。
  • menuCategory-對菜單進行分類,定義菜單的優先級,有效值為container、system、secondary和alternative。
  • orderInCategory-一個分類排序整數。
  • checkableBehavior-選擇行為,單選、多選還是其他。有效值為none、all、ingle。
  • visible-是否可見,true或false。
  • enable-是否可用,true或false。
<item>表示菜單項,包含在<menu>和<group>中的有效屬性。<item>屬性如下:
  • id-唯一標示該菜單項的引用id。
  • menuCategory-菜單分類。
  • orderInCategory-分類排序。
  • title-菜單標題字串。
  • titleCondensed-濃縮標題,適合標題太長的時候使用。
  • icon-菜單圖示。
  • alphabeticShortcut-字符快捷鍵。
  • numericShortcut-數字快捷鍵。
  • checkable-是否可選。
  • checked-是否已經被選。
  • visible-是否可見。
  • enabled-是否可用。
菜單文件的使用
  1. 在專案的res/menu目錄下創建my_menu.xml菜單資源文件。

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@+id/new_game"
              android:icon="@drawable/ic_new_game"
              android:title="@string/new_game" />
        <item android:id="@+id/help"
              android:icon="@drawable/ic_help"
              android:title="@string/help" />
    </menu>
    
    
  2. 複寫Activity中的onCreateOptionsMenu()方法,在其中創建菜單。

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.game_menu, menu);
        return true;
    }
  3. 複寫Activity中的onOptionsItemSelected()方法,反應菜單項單擊事件。

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
        case R.id.new_game:
            newGame();
            return true;
        case R.id.help:
            showHelp();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

沒有留言:

張貼留言