メニューリソースを用いたオプションメニュー

メニューボタンを押したときに、表示されるメニューの作り方を紹介します。

アプリケーションの使い方で困ったときは、メニューボタンを押すというのは Android を利用するユーザーの基本動作です。

あなたのアプリケーションにもメニューを適切に設定して、ユーザーが困らないように、あるいは困ったときに助けになるようなメニューを設置したいものです。

ここでは単純なオプションメニューを作る方法を説明します。

メニューボタンを押すとオプションメニューが表示されるとは?

Android のメニュー (MENU) ボタンはこれです。

Android の Menu ボタン

Android を使っていて、何かを設定するとき、追加の情報が欲しいときなどは MENU を押してみて何か表示されないか見てみることも多いのではないでしょうか。

ここではメニューボタンを押したときに、次のようなメニューがでるプログラムを作ります。

Android Options Menu

このメニューはオプションメニュー (Options Menu) と呼ばれます。

メニューリソースを利用したオプションメニューの作り方

オプションメニューはプログラムでも作れますが、リソースファイルでメニュー内容を定義するのがもっとも簡単でしょう。

ここでは単純なメニューの表示方法を紹介します。

次の手順で作ります。

  1. メニューリソースを作成 (res/menu 以下に保存)
  2. onCreateOptionsMenu をオーバーライド。ここで MenuInflater でリソースからメニューを作成
  3. onOptionsItemSelected でメニュー項目の選択に応答する

メニューリソースを作成

res ディレクトリ以下に menu ディレクトリを作成します。その中に optionsmenu.xml という名前で次のファイルを作ります。

<?xml version="1.0" encoding="utf-8"?>
<menu 
  xmlns:android="http://schemas.android.com/apk/res/android">
	<item 
		android:id="@+id/menuitem1"
		android:title="Item1"
		android:icon="@drawable/a"/>
	<item
		android:id="@+id/menuitem2"
		android:title="Item2"
		android:icon="@drawable/b"/>
	<item
		android:id="@+id/menuitem3"
		android:title="Item3"
		android:icon="@drawable/c"/>
</menu>

ちなみに、ファイル名は任意です。

またここで、メニューのアイコンとして次のような a.png, b.png, c.png を res 以下の drawable ディレクトリ (drawable-hdpi, drawable-ldpi, drawable-mdpi, drawable-xhdpi) に保存しました。

onCreateOptionsMenu と onOptionsItemSelected のオーバーライド

こちらはまとめてソースをみてください。特に難しい点はありません。

package com.keicode.android.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

public class OptMenu1Activity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.optionsmenu, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch(item.getItemId()){
		case R.id.menuitem1:
			showMessage("Hello! Item1");
			return true;
		case R.id.menuitem2:
			showMessage("Hello! Item2");
			return true;
		case R.id.menuitem3:
			showMessage("Hello! Item3");
			return true;
		}
		return false;
	}
	
	protected void showMessage(String msg){
		Toast.makeText(
			this, 
			msg, Toast.LENGTH_SHORT).show();
	}
}

onCreateOptionsMenu は MENU ボタンを押したときに呼ばれ、onOptionsItemSelected はメニュー項目を選択した時に自動的に呼ばれます。

特にクリックリスナ等を自分で実装する必要もないので簡単ですね。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Android 開発入門