画面によって表示するメニューが異なるものの、大体同じだったり
常に登場するメニューがあるとする。その場合は項目のグループごとにファイルを分割する。
res/menu/detail.xml (詳細画面でのみ表示)
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 検索 --> <item android:id="@id/action_search_item" android:actionViewClass="android.support.v7.widget.SearchView" android:icon="@drawable/abc_ic_search" android:orderInCategory="1" android:showAsAction="ifRoom|collapseActionView" android:title="@string/search"/> <item android:id="@id/action_share_item" android:orderInCategory="3" android:showAsAction="ifRoom" android:title="@string/share" /> </menu>
res/menu/global.xml (常に表示)
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- map --> <item android:id="@id/menu_map" android:orderInCategory="2" android:showAsAction="ifRoom" android:title="@string/map"/> <!-- 設定 --> <item android:id="@id/menu_settings" android:orderInCategory="10" android:showAsAction="never" android:title="@string/settings"/> <!-- ヘルプ --> <item android:id="@id/menu_help" android:orderInCategory="20" android:showAsAction="never" android:title="@string/help"/> <!-- このアプリについて --> <item android:id="@id/menu_about" android:orderInCategory="30" android:showAsAction="never" android:title="@string/about"/> </menu>
で、まとめてinfrateする。このとき、共通項目なんだけど、順番的には個別項目の間にくるようなケースがある。
そんな場合は android:orderInCategoryでソート順を指定するといい感じにソートして表示してくれる。
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = new MenuInflater(this); inflater.inflate(R.menu.item_detail, menu); inflater.inflate(R.menu.global, menu); }