オプションメニュー(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);
アイコンの一覧表
タオソフトウェアさんが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でメニュー非表示になります。
About The Author
ひつじ(mhidaka)
Software Engineerだよ。DroidKaigi Organizer / Androidと組込とRe:VIEW。techbooster主宰。mhidaka's writings http://booklog.jp/users/mhidaka 技術書典! http://techbookfest.org