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でメニュー非表示になります。