2011年12月22日木曜日

OptionsMenu (SubMenu)

メニューボタンを表示するOptionsMenuについては以前ご紹介しました。
今回はそのメニューにサブメニューを追加する方法をご紹介します。


サブメニュー

サブメニューはSubMenuクラスで作ります。SubMenuクラスのオブジェクトをMenuクラスのオブジェクトに追加することで、メニューを階層化することができます。

早速サンプルを作ってみましょう。

Androidプロジェクトの設定
プロジェクト名:OptionsMenuTest2a
ビルドターゲット:Android 2.1-update1
アプリケーション名:OptionsMenuTest2a
パッケージ名:jp.co.triware.samples.OptionsMenuTest2a
アクティビティーの作成:OptionsMenuTest2aActivity
最小SDKバージョン:7

OptionsMenuTest2aActivity.java
package jp.co.triware.samples.OptionsMenuTest2a;

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

public class OptionsMenuTest2aActivity extends Activity {
    // "Agenda"メニューの項目ID
    private static final int OPTMENU_AGENDA             = 10;
    private static final int OPTMENU_AGENDA_TODO        = 11;
    private static final int OPTMENU_AGENDA_EVENT       = 12;
    private static final int OPTMENU_AGENDA_ANNIVERSARY = 13;
    // "Calendar"メニューの項目ID
    private static final int OPTMENU_CALENDAR           = 20;
    private static final int OPTMENU_CALENDAR_TODAY     = 21;
    private static final int OPTMENU_CALENDAR_1DAY      = 22;
    private static final int OPTMENU_CALENDAR_1WEEK     = 23;
    private static final int OPTMENU_CALENDAR_2WEEK     = 24;
    private static final int OPTMENU_CALENDAR_1MONTH    = 25;
    private static final int OPTMENU_CALENDAR_2MONTH    = 26;
    private static final int OPTMENU_CALENDAR_3MONTH    = 27;
    private static final int OPTMENU_CALENDAR_6MONTH    = 28;
    private static final int OPTMENU_CALENDAR_1YEAR     = 29;

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // "Agenda"メニュー
        SubMenu subAgenda = menu
            .addSubMenu(Menu.NONE, OPTMENU_AGENDA, Menu.NONE, "Agenda")
            .setIcon(android.R.drawable.ic_menu_agenda);
        // "Agenda"メニューのサブメニュー
        subAgenda
            .add(Menu.NONE, OPTMENU_AGENDA_TODO, Menu.NONE, "To-Do");
        subAgenda
            .add(Menu.NONE, OPTMENU_AGENDA_EVENT, Menu.NONE, "Event");
        subAgenda
            .add(Menu.NONE, OPTMENU_AGENDA_ANNIVERSARY, Menu.NONE, "Anniversary");

        // "Calendar"メニュー
        SubMenu subCalendar = menu
            .addSubMenu(Menu.NONE, OPTMENU_CALENDAR, Menu.NONE, "Calendar")
            .setIcon(android.R.drawable.ic_menu_my_calendar);
        // "Calendar"メニューのサブメニュー
        subCalendar
            .add(Menu.NONE, OPTMENU_CALENDAR_TODAY, Menu.NONE, "Day (Today)");
        subCalendar
            .add(Menu.NONE, OPTMENU_CALENDAR_1DAY, Menu.NONE, "Day");
        subCalendar
            .add(Menu.NONE, OPTMENU_CALENDAR_1WEEK, Menu.NONE, "Week");
        subCalendar
            .add(Menu.NONE, OPTMENU_CALENDAR_2WEEK, Menu.NONE, "2-Week");
        subCalendar
            .add(Menu.NONE, OPTMENU_CALENDAR_1MONTH, Menu.NONE, "Month");
        subCalendar
            .add(Menu.NONE, OPTMENU_CALENDAR_2MONTH, Menu.NONE, "2-Month");
        subCalendar
            .add(Menu.NONE, OPTMENU_CALENDAR_3MONTH, Menu.NONE, "3-Month");
        subCalendar
            .add(Menu.NONE, OPTMENU_CALENDAR_6MONTH, Menu.NONE, "6-Month");
        subCalendar
            .add(Menu.NONE, OPTMENU_CALENDAR_1YEAR, Menu.NONE, "Year");

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        boolean bRet = true;
        String buf = "";

        int id = item.getItemId();
        switch (id) {
        case OPTMENU_AGENDA:
            buf = "Agenda";
            break;
        case OPTMENU_AGENDA_TODO:
            buf = "To-Do List";
            break;
        case OPTMENU_AGENDA_EVENT:
            buf = "Events List";
            break;
        case OPTMENU_AGENDA_ANNIVERSARY:
            buf = "Anniversary List";
            break;
        case OPTMENU_CALENDAR:
            buf = "Calendar";
            break;
        case OPTMENU_CALENDAR_TODAY:
            buf = "Today's Calendar";
            break;
        case OPTMENU_CALENDAR_1DAY:
            buf = "1-Day Calendar";
            break;
        case OPTMENU_CALENDAR_1WEEK:
            buf = "1-Week Calendar";
            break;
        case OPTMENU_CALENDAR_2WEEK:
            buf = "2-Week Calendar";
            break;
        case OPTMENU_CALENDAR_1MONTH:
            buf = "1-Month Calendar";
            break;
        case OPTMENU_CALENDAR_2MONTH:
            buf = "2-Month Calendar";
            break;
        case OPTMENU_CALENDAR_3MONTH:
            buf = "3-Month Calendar";
            break;
        case OPTMENU_CALENDAR_6MONTH:
            buf = "6-Month Calendar";
            break;
        case OPTMENU_CALENDAR_1YEAR:
            buf = "1-Year Calendar";
            break;
        default:
            bRet = false;
            break;
        }

        if (buf.length() > 0) {
            Toast.makeText(getApplicationContext(),
                buf, Toast.LENGTH_SHORT).show();
        }

        return bRet;
    }
}

実行結果
メニューを選択すると…

サブメニューが表示されました。
サブメニューはこのように一覧形式で表示されますので、項目数が多くて画面に収まりきらないときはスクロールします。

0 件のコメント:

コメントを投稿