Android -オプションメニュー-
オプションメニュー
オプションメニューとは、端末のMENUボタンを押すことによって表示されるメニューのことです。アプリケーションの補助的な操作に利用します。
オプションメニューを表示するには、ActivityクラスのonCreateOptionMenu()メソッドをオーバーライドし、 渡されるMenuオブジェクトにメニューアイテムを追加します。
- void onCreateOptionsMenu(Menu menu)
- 機能:オプションメニューの生成
- menu:メニュー
メニューアイテムを追加するには、Menuクラスのadd()メソッドを使用します。。
- abstract MenuItem add(int groupId, int itemId, int order, CharSequence title)
- 機能:オプションアイテムの追加
-
- groupId:グループID
- メニューグループを識別するIDの指定
-
- itemID:アイテムID
- メニューアイテムを識別するIDの指定
-
- order:優先順位の指定
- メニューアイテムが多い場合に優先して表示する順序を指定します。
- 0に近いぼど優先され、同じ値の場合は、設定した順序で表示されます。
- title:各メニューアイテムに表示される文字列
Menuクラスのadd()メソッドの戻り値でMenuItemオブジェクトを取得し、それに対して MenuItemクラスのsetItem()メソッドで使用して、アイコン画像を指定することができます。
- abstract setIcon(int iconRes)
- 機能:アイコン画像
- iconRes:リソースID
システムが保持する画像を利用することもできます。
代表的なリソースID一覧は、こちらです。
メニューアイテムが選択された場合には、ActivityクラスのonOptionItemSelected() メソッドが呼ばれます。
引数として、選択されたメニューアイテムのオブジェクトが渡されます。
そのオブジェクトのIDをMenuItemクラスのgetItemId()メソッドでメニューアイテムのIDを取得することができます。
- abstract int getItemId()
- 機能:アイコンIDの取得
オプションメニューは、1度に6つまでしかメニューアイテムを表示できません。
もし、7つ以上のメニューアイテムを設定したい場合、6つ目のメニューアイテムに「More」や「その他」を設定し、 そのメニューアイテムが押される6つ目以上のメニューアイテムを一覧表示する拡張メニューを実装します。
6つ目以降のメニューアイテムの追加は、addSubMenu()メソッドを使用してサブメニューという形式で追加していきます。
サンプル1 P0407OptionMenuEx1 (オプションメニューをJava記述)
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical" >
</LinearLayout>
P0407OptionMenuEx1.java
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class P0407OptionMenuEx1 extends Activity {
// メニューアイテムID
private static final int MENU_ITEM0 = 0, MENU_ITEM1 = 1, MENU_ITEM2 = 2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
// オプションメニューの生成
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// メニューアイテム1の追加
MenuItem item0 = menu.add(0, MENU_ITEM0, 0, "アイテム0");
item0.setIcon(android.R.drawable.ic_menu_call);
// メニューアイテム2の追加
MenuItem item1 = menu.add(0, MENU_ITEM1, 0, "アイテム1");
item1.setIcon(android.R.drawable.ic_menu_save);
// メニューアイテム3の追加
MenuItem item2 = menu.add(0, MENU_ITEM2, 0, "アイテム2");
item2.setIcon(android.R.drawable.ic_menu_camera);
return true;
}
// メニューアイテム選択イベント
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
showDialog("アイテム0を選択");
return true;
case 1:
showDialog("アイテム1を選択");
return true;
case 2:
showDialog("アイテム2を選択");
return true;
}
return true;
}
// ダイアログの表示
private void showDialog(String message) {
AlertDialog.Builder ad = new AlertDialog.Builder(this);
ad.setTitle("選択結果");
ad.setMessage(message);
ad.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
P0407OptionMenuEx1.this.setResult(Activity.RESULT_OK);
}
});
ad.show();
}
}
サンプル2 P0407OptionMenuEx2 (オプションメニューをxml記述)
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical" >
</LinearLayout>
res/menu/option_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/item0"
android:icon="@android:drawable/ic_menu_call"
android:title="アイテム0">
</item>
<item
android:id="@+id/item1"
android:icon="@android:drawable/ic_menu_save"
android:title="アイテム1">
</item>
<item
android:id="@+id/item2"
android:icon="@android:drawable/ic_menu_camera"
android:title="アイテム2">
</item>
</menu>
P0407OptionMenuEx2.java
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
public class P0407OptionMenuEx2 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
// オプションメニューの生成
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// xmlリソースファイルよりメニュー表示
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.option_menu, menu);
return true;
}
// メニューアイテム選択イベント
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case R.id.item0:
showDialog("アイテム0を選択");
return true;
case R.id.item1:
showDialog("アイテム1を選択");
return true;
case R.id.item2:
showDialog("アイテム2を選択");
return true;
}
return true;
}
// ダイアログの表示
private void showDialog(String message) {
AlertDialog.Builder ad = new AlertDialog.Builder(this);
ad.setTitle("選択結果");
ad.setMessage(message);
ad.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
P0407OptionMenuEx2.this.setResult(Activity.RESULT_OK);
}
});
ad.show();
}
}