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