ホーム >  Android > オプションメニュー

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();
  }
}