<< Android-Note
階層構造を持つメニューの作成
1つのメニューがクリックされたら他のメニューグループを表示するような階層構造を持つメニューが作りたかったので、その作成方法を紹介します。
手順は次のようなものです。
メニューをxmlで定義する
まず、次の画像のような階層構造を持ったxmlファイルをmenu/main.xmlファイルに作ります。
このメニューは次のようなxmlファイルでできています。
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/setting_menu"
android:title="@string/setting"
android:icon="@drawable/setting"
android:showAsAction="always" >
<menu>
<item android:id="@+id/font_menu"
android:title="@string/font_menu_title"
android:icon="@drawable/font" />
<item android:id="@+id/icon_menu"
android:title="@string/icon_menu_title"
android:icon="@drawable/icon" />
</menu>
</menu>
itemタグ内にもmenuタグを置くことができるので、これでメニューに階層構造を持たせることができます。
各アイテムにはタイトルとアイコン画像を指定しています。
また、アクションバーに表示するメニュについてはshowAsAction属性を"always"にして常に表示させるようにしています。
メニューを設置する
次に以下のコードをActivityクラス内に書き、メニューをアクションバーに設置します。
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); //メニューのxmlファイルを設定 return true; }
MenuInflaterクラスのinflateメソッドにメニューのレイアウトID(R.id.main)を渡すだけで画面にメニューが表示されます。
メニューが押されたときの処理
最後にどのメニューが押されたかを判断する処理をActivityのonOptionsItemSelectedメソッド内で行います。
コードは次のようになります。
public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.font_menu: Log.i("MainActivity : ", "メニュー1"); return true; case R.id.icon_menu: Log.i("MainActivity : ", "メニュー2"); return true; default: return super.onOptionsItemSelected(item); } }
渡されたMenuItemからgetItemIdでIDを取得して、そのIDに応じた処理をしています。
関連項目
© Kaz