X

オプションメニュー(OptionsMenu)を追加する

AndroidではMenuボタンが、必ずついています。
アプリケーションの設定項目として利用するにはonCreateOptionsMenuメソッドを実装する必要があります。
サンプルコードを例に、OptionsMenuの使い方を説明します。

設定メニュー(OptionsMenu)は最大6つまで同時に表示できます。
それ以上は「その他」ボタンで統合され、List形式で表示されます。

簡単なメニューを持ったActivityを作ります。以下のコードを追加します。

    public boolean onCreateOptionsMenu(Menu menu){

    	menu.add(0, MENU_SELECT_A, 0, "Menu A");
        menu.add(0, MENU_SELECT_B, 0, "Menu B");

        return true;
    }

onCreateOptionsMenuメソッドはメニューの生成時に呼ばれるため、ここで引数のmenu(android.view.Menuパッケージ)に表示項目を追加・生成します。
第2引数はメニュー項目ごとの識別子です。今回は、

    public static final int MENU_SELECT_A = 0;
    public static final int MENU_SELECT_B = 1;

を用意しました。実際のアプリケーションでは、メニュー数に応じて作成してください。

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case MENU_SELECT_A:
        	Log.d("Menu","Select Menu A");
            return true;

        case MENU_SELECT_B:
        	Log.d("Menu","Select Menu B");
            return true;

        }
        return false;
    }

onOptionsItemSelectedメソッドでは、ユーザーがメニューを選択したとき、選択項目をMenuItemとして受け取ることが出来ます。
サンプルでは、MENU_SELECT_A/Bともにログ出力のみ行っています(必要な処理に置き換えて下さい)

メニューアイコンの追加

Menu.setIconを利用すると、メニューアイコンを追加できます。

    	menu.add(0, MENU_SELECT_A, 0, "Menu A")
    			.setIcon(android.R.drawable.ic_menu_save);
        menu.add(0, MENU_SELECT_B, 0, "Menu B")
        		.setIcon(R.drawable.myIcon);

Menu Aのように標準的なAndroidのICONを利用すればユーザーは直感的に操作できます。
Menu Bのように独自のICONを指定すれば、より運用の幅が広がるはずです。

上記のソースコードは

        MenuItem menuA=menu.add(0, MENU_SELECT_A, 0, "Menu A");
        menuA.setIcon(android.R.drawable.ic_menu_save);

などMenuItemで、明示的に書き換えることも可能です。

アイコンの一覧表

タオソフトウェアさんがAndroid標準アイコンの一覧表を作成されています。
適切なアイコンが分からない・見つからない時は特に便利です。

Android メニューアイコン

ActivityのOptionsMenu関連メソッド

public void closeOptionsMenu() メニューを閉じます(閉じられていれば何もしない)
public boolean onCreateOptionsMenu(Menu menu) メニュー生成時に呼び出されます
public boolean onOptionsItemSelected(MenuItem item) メニュー項目を通知します
public boolean onPrepareOptionsMenu(Menu menu) メニューが表示される前に呼ばれます(毎回)
public void onOptionsMenuClosed (Menu menu) メニューを閉じるときに呼ばれます(毎回)
public void openOptionsMenu() メニューを開きます(開かれていたら何もしない)


これらの中でも、よく使うのが

  public boolean  onPrepareOptionsMenu  (Menu menu)

です。onPrepareOptionsMenuメソッドは、Menuを表示する前に必ず呼び出されるので、MenuItemの有効/無効設定やOptionsMenuの動的な変更を行うのに適したメソッドです。
onPrepareOptionsMenuメソッドの返値はOptionsMenuの表示可否フラグです。trueで表示、falseでメニュー非表示になります。

mhidaka: Software Engineerだよ。DroidKaigi Organizer / Androidと組込とRe:VIEW。techbooster主宰。mhidaka's writings http://booklog.jp/users/mhidaka 技術書典! http://techbookfest.org