Android – Options Menuの使い方(コード編)

ActivityでMenuボタンを押したときのメニューはOptions Menuと言います。

これの使い方メモ

メニューそのものを作るのは簡単で、ActivityのonCreateOptionsMenuをOverrideしてそこでメニューを作ってやるだけ。

最後にtrueを返すことでMenu KeyによってMenuが表示されるようになります。

menuへの追加はadd(int groupId, int itemId, int order, int titleRes)でやるのが一般的な方法だと思う。

groupIdはMenuの状態変更をまとめてやりたい場合に設定する。Menu.setGroupXXXXってMethodが用意されてる。普通はMenu.NONE=0で良いぽ。

itemIdはmenuが選択されたときに、どのmenuが選択されたのかを判断するためのuniqueな番号。例だとstring resourceのidをそのまま使っちゃってます。識別さえ出来れば良いので適当に(XMLでitemを定義する場合は@+id/xxxxx_xxxxx_menuとかでIDを作成すれば良いです)。

次がorder。表示の順番の指定。これも特に意識しないのであればMenu.NONEで指定すれば最後に追加されます。

最後が文字列リソースの番号。表示文字列のリソースID。

アイコンの設定はaddしたあとに戻るMenuItemに対してsetIconする。

このときにandroid.R.drawable.ic_menu_xxxxxxxxにいろいろあるので使える。

普通の用途ならこれで十分じゃないかな。

一応、ここで渡されるMenu Objectはあとで状態変更したりするときに使って良いみたい。onCreateOptionsMenuがもう一度呼び出されない限りってSDKにあるけど、このonCreateOptionsMenuそのものが一度しか呼ばれない。って書いてあるんだけど、、、?まぁあんまり気にしなくて良いって事かな。

続いてメニューをユーザが選択したときの処理方法。

こちらもonOptionsItemSelected(MenuItem item)をOverrideするだけ。

とか、こんな感じ。こちらは説明いらないか。

Menuを処理したらtrueを返す。そんな感じ。

あと多分知っておいたほうが良いこと二点ほど。

メニューの状態(enable/disable)を条件によって変えたい場合。onPrepareOptionsMenuという関数があって、こちらはOptionsメニューが表示される度に呼ばれるので、状態によって特定のMenuをDisableにしたい場合はこちらをOverrideして操作をすれば良い。

Options Menuは6個以上に増えるとMore(日本語だと その他)ってアイコンが自動的に追加されて階層化されるようになるので、使用頻度の高いMenuは前のほうにもってくる。これは前述のorderを指定すれば良い。