メニューリソースを用いたオプションメニュー
メニューボタンを押したときに、表示されるメニューの作り方を紹介します。
アプリケーションの使い方で困ったときは、メニューボタンを押すというのは Android を利用するユーザーの基本動作です。
あなたのアプリケーションにもメニューを適切に設定して、ユーザーが困らないように、あるいは困ったときに助けになるようなメニューを設置したいものです。
ここでは単純なオプションメニューを作る方法を説明します。
メニューボタンを押すとオプションメニューが表示されるとは?
Android のメニュー (MENU) ボタンはこれです。
Android を使っていて、何かを設定するとき、追加の情報が欲しいときなどは MENU を押してみて何か表示されないか見てみることも多いのではないでしょうか。
ここではメニューボタンを押したときに、次のようなメニューがでるプログラムを作ります。
このメニューはオプションメニュー (Options Menu) と呼ばれます。
メニューリソースを利用したオプションメニューの作り方
オプションメニューはプログラムでも作れますが、リソースファイルでメニュー内容を定義するのがもっとも簡単でしょう。
ここでは単純なメニューの表示方法を紹介します。
次の手順で作ります。
- メニューリソースを作成 (res/menu 以下に保存)
- onCreateOptionsMenu をオーバーライド。ここで MenuInflater でリソースからメニューを作成
- 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 はメニュー項目を選択した時に自動的に呼ばれます。
特にクリックリスナ等を自分で実装する必要もないので簡単ですね。