画面によって表示するメニューが異なるものの、大体同じだったり
常に登場するメニューがあるとする。その場合は項目のグループごとにファイルを分割する。
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);
}