アクションバーにオプションメニューを実装し操作性を向上させる

Androidアプリ開発

今回は、アクションバーに表示する「オプションメニュー」の実装方法を初心者にもわかりやすく解説します!

アプリの機能をシンプルに充実させるために、ぜひマスターしてくださいね!

アクションバーについて

アクションバーの解説は以下の記事で行っているので、ご覧ください♪

Androidアプリの操作性を向上させるアクションバーをカスタマイズする
Androidアプリ開発に欠かせない「アクションバー」について、基本から実装方法までをわかりやすく解説。アプリの操作性やデザインを向上させるアクションバーの活用法を学び、ユーザーが使いやすいアプリを目指しましょう!

オプションメニューについて

オプションメニューとは?

オプションメニューは、アプリ全体で共通の設定や追加機能にアクセスするためのメニューです。通常、ツールバーやアクションバー上に表示され、ユーザーがアプリの設定やアクション(例えば「設定」「検索」「プロフィール」など)にアクセスできるようにするのが主な役割です。

オーバーフローメニューとは?

オーバーフローメニューは、オプションメニュー内に配置される追加項目です。特に、ツールバーやアクションバーに表示しきれないメニュー項目がある場合に使用されます。オーバーフローメニューは3つの縦ドット(オーバーフローアイコン)として表示され、これをタップすることで、ツールバー上に収まりきらなかった追加のメニュー項目が展開される仕組みです。

オプションメニューとオーバーフローメニューの違い

  • オプションメニュー:
    アプリ全体における共通の操作や設定をまとめて表示するメニューで、常にツールバーやアクションバーに表示されます。
  • オーバーフローメニュー:
    プションメニュー内の項目が表示領域に収まらない場合に、3つの縦ドットアイコンからアクセスできる追加メニュー項目です。オプションメニューの中で一部を「省略」して表示する仕組みとして機能します。

オプションメニューの実装方法

オプションメニューは以下の3ステップで実装ができます。

  1. メニューリソースファイルを作成
  2. メニューを表示する
  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 属性を alwaysifRoom に設定することが重要です。

<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 または FragmentonCreateOptionsMenu() メソッドをオーバーライドし、作成したメニュー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);
}

まとめ

いかがでしたでしょうか?オプションメニューなど聞きなれない用語であったかと思います。

オプションメニューを実装することで、画面表示をシンプルにしつつも機能を充実させることが可能です。今回はアクションバーに表示するオプションメニューを解説しましたが、メニュー表示方法には他にも、ボタンを押して表示する「コンテキストメニュー」という選択肢もあります。

表示方法を工夫し、シンプルで使いやすい、そして機能が充実したアプリ開発を目指しましょう!

タイトルとURLをコピーしました