今回はそのメニューにサブメニューを追加する方法をご紹介します。
◆ サブメニュー
サブメニューは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 件のコメント:
コメントを投稿