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を指定すれば良い。