今回は、アクションバーに表示する「オプションメニュー」の実装方法を初心者にもわかりやすく解説します!
アプリの機能をシンプルに充実させるために、ぜひマスターしてくださいね!
アクションバーについて
アクションバーの解説は以下の記事で行っているので、ご覧ください♪

オプションメニューについて
オプションメニューとは?
オプションメニューは、アプリ全体で共通の設定や追加機能にアクセスするためのメニューです。通常、ツールバーやアクションバー上に表示され、ユーザーがアプリの設定やアクション(例えば「設定」「検索」「プロフィール」など)にアクセスできるようにするのが主な役割です。
オーバーフローメニューとは?
オーバーフローメニューは、オプションメニュー内に配置される追加項目です。特に、ツールバーやアクションバーに表示しきれないメニュー項目がある場合に使用されます。オーバーフローメニューは3つの縦ドット(オーバーフローアイコン)として表示され、これをタップすることで、ツールバー上に収まりきらなかった追加のメニュー項目が展開される仕組みです。
オプションメニューとオーバーフローメニューの違い
- オプションメニュー:
アプリ全体における共通の操作や設定をまとめて表示するメニューで、常にツールバーやアクションバーに表示されます。 - オーバーフローメニュー:
プションメニュー内の項目が表示領域に収まらない場合に、3つの縦ドットアイコンからアクセスできる追加メニュー項目です。オプションメニューの中で一部を「省略」して表示する仕組みとして機能します。
オプションメニューの実装方法
オプションメニューは以下の3ステップで実装ができます。
- メニューリソースファイルを作成
- メニューを表示する
- メニュー項目のクリック処理
1.メニューリソースファイルを作成
まず、res/menu/
フォルダに XML ファイルを作成し、メニュー項目を定義します。このファイルで、オーバーフローメニューを選択した際に表示される項目や、その配置方法を設定できます。
例:example_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_settings"
android:title="Settings"
android:showAsAction="never" />
<item
android:id="@+id/action_about"
android:title="About"
android:showAsAction="never" />
</menu>
属性 | 概要 |
android:showAsAction | オプションメニューの項目がアクションバーやツールバーにどのように表示されるかを制御する |
補足:showAsAction
で指定できる値
showAsAction属性は、以下のオプションで設定可能です。
オプション | 概要 |
always | アクションバーやツールバーに常に表示 |
ifRoom | アクションバーやツールバーにスペースが十分にある場合にのみ表示され、スペースが不足する場合はオーバーフローメニューに移動 |
never | アクションバーやツールバーには表示されず、常にオーバーフローメニューに移動 |
withText | アイコンと共にテキストラベルを表示 |
ビット演算子(|
)を使って、複数のオプションを組み合わせることができます。用途に応じて適切な表示方法を設定しましょう!
補足:オプションメニューをアイコンを表示させる
オプションメニューの項目にアイコンを表示させるには、android:icon
属性を使います。アイコン付きのメニュー項目をアクションバーに表示させるには、showAsAction
属性を always
や ifRoom
に設定することが重要です。
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_settings"
android:title="Settings"
android:icon="@drawable/ic_settings" <!-- アイコンを指定 -->
android:showAsAction="always" /> <!-- アクションバーに常に表示 -->
</menu>
2.メニューを表示する
Activity
または Fragment
で onCreateOptionsMenu()
メソッドをオーバーライドし、作成したメニューXMLファイルをインフレートして表示します。
例: XXActivity.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.example_menu, menu);
return true;
}
3.メニュー項目のクリック処理
メニュー項目が選択された際の処理は、onOptionsItemSelected()
メソッドで実装します。このメソッド内で選択されたアイテムのIDを取得し、それに応じた処理を実行します。
例: XXActivity.java
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
// 設定メニューが選択されたときの処理
return true;
} else if (id == R.id.action_about) {
// Aboutメニューが選択されたときの処理
return true;
}
return super.onOptionsItemSelected(item);
}
処理をまとめると…
example_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_settings"
android:title="Settings"
android:showAsAction="never" />
<item
android:id="@+id/action_about"
android:title="About"
android:showAsAction="never" />
</menu>
XXActivity.java
//オプションメニューの設定
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.example_menu, menu);
return true;
}
//オプションメニューのクリック処理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
// 設定メニューが選択されたときの処理
return true;
} else if (id == R.id.action_about) {
// Aboutメニューが選択されたときの処理
return true;
}
return super.onOptionsItemSelected(item);
}
戻るボタンもオプションメニュー
画面遷移した後に、1つ前に戻る際に用意されている戻るボタンもオプションメニューの1つです
オプションメニューXMLの用意は不要でonOptionsItemSelected()メソッドをオーバーライドし、戻るボタンのIDであるandroid.R.id.homeでif文を実装すればOKです。
finish()を指定することで現時点のActivityのライフサイクルを終了し1つ前の画面に戻ります。
//オプションメニューのクリック処理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (itemId == android.R.id.home) {
finish();
} else {
return super.onOptionsItemSelected(item);
}
return super.onOptionsItemSelected(item);
}
まとめ
いかがでしたでしょうか?オプションメニューなど聞きなれない用語であったかと思います。
オプションメニューを実装することで、画面表示をシンプルにしつつも機能を充実させることが可能です。今回はアクションバーに表示するオプションメニューを解説しましたが、メニュー表示方法には他にも、ボタンを押して表示する「コンテキストメニュー」という選択肢もあります。
表示方法を工夫し、シンプルで使いやすい、そして機能が充実したアプリ開発を目指しましょう!