リソース管理フォルダにメニュー用のフォルダを追加
resで右クリックして新規→Android リソース・ディレクトリーを選択
リソース・タイプの箇所で「menu」を選択して「OK」
メニュー用のリソースファイルを追加
追加したmenuフォルダで右クリックして新規→Menu リソース/ファイルを選択
名前は適当に入力して(今回は「option」と入力)「OK」
メニュー用リソースファイルを編集
「option.xml」というファイルが作成されるので、以下のように編集
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menuItem1"
android:title="メニュー1" />
<item
android:id="@+id/menuItem2"
android:title="メニュー2" />
</menu>
アクティビティにメニューを紐付ける
public class MainActivity extends AppCompatActivity {
...
// メニューをActivity上に設置する
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 参照するリソースは上でリソースファイルに付けた名前と同じもの
getMenuInflater().inflate(R.menu.option, menu);
return super.onCreateOptionsMenu(menu);
}
// メニューが選択されたときの処理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuItem1:
...
return true;
case R.id.menuItem2:
...
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
これで(たったこれだけで)アプリの右肩あたりにメニューが表示される。
getMenuInfrater.infrate()するときに複数のメニューを紐付けることが可能。
例えば、アプリ共通のグローバルメニューをinfrate()しといて、画面固有のものをあとからinfrate()するといった感じ。
getMenuInfrater().inflate(R.menu.global_menu, menu);
getMenuInfrater().inflate(R.menu.sub_menu, menu);
この場合、各メニューのレイアウトファイルで
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menuQuit"
android:title="終了"
android:orderInCategory="90"/>
</menu>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menuSub1"
android:title="サブメニュー"
android:orderInCategory="1" />
<item
android:id="@+if/menuSub2"
android:title="サブメニューその2"
android:orderInCategory="2" />
</menu>
といった感じでorderInCategoryを指定してあげると、値の昇順に並べ替えて表示してくれるようになる。
もしこのやり方をやるなら、Androidの開発ガイドにも書かれてるとおり、共通のグローバルメニューに対応したonCreateOptionsMenu()とonOptionsItemSelected()が実装されたActivityを作成しておき、各Activityはこれを継承してオーバーライドしてやれば問題ない。
継承する場合は、onCreateOptionsMenu()内でsuper.onCreateOptionsMenu(menu);とやったあと、自Activityで利用させたいメニューについてはmenu.add()で追加していく形になるっぽい。