Androidアプリケーションにおけるメニューのひとつ、オプションメニューの作り方を紹介します。
オプションメニューはMenuボタンを押下したときに表示されるメニューです。
アイコンメニューと拡張メニューが存在し、拡張メニューは選択肢が7個以上になった場合に表示されるメニューのことです。
選択肢が6個の場合 ( アイコンメニュー )
選択肢が7個の場合 ( アイコンメニュー + 拡張メニュー )
メニューを作成するはActivity#onCreateOptionsMenu()メソッドを使用します。
このメソッドはActivityから最初に起動されるときに呼びだされ、このメソッド内でオプションメニューを作成します。
表示されるメニュー内容は ( アイコンやメニュー名など ) はMenu#add()メソッドをして追加します。( MenuオブジェクトはonCreateOptionsMenu()メソッドの引数を使用します。 )
Activity#onCreateOptionsMenu()のシグネチャ
public boolean onCreateOptionsMenu (Menu menu)
Menu#add()のシグネチャ
MenuItem add(int groupId, int itemId, int order, CharSequence title)
データ型 | 引数名 | 概要 |
int | groupId |
メニューをグループ化したいときに利用するID (グループ単位で表示/非表示、有効/無効などを切り替え可能) |
int | itemId | メニューを一意に特定するためのID(どのメニューが選択されたかを判断する) |
int | order | 表示順序 |
CharSequence | title | メニューの表示名 |
※CharSequence※
第4引数のデータ型がCharSequenceとなっています。
これはインタフェースで、文字列を表すStringやStringBufferクラスが実装しているインタフェースとなっています。
Stringオブジェクトをそのまま渡すことができますので、よくわからない方はStringのようなものだと覚えておけばよいでしょう。
このメニューの作り方のポイントは、基本的に1つのActivityに対して1つのオプションメニューしか対応できないということです。
つまり、動的なメニュー ( Activityの状態に応じて表示するメニューを切り替える ) には対応していません。
動的なメニューを作成したい場合は、Activity#OnPrepareOptionsMenu()を使う必要があります。
次に、ユーザーがオプションメニューをクリックした際の動作を定義する方法です。
Activity#onOptionsItemSelected()メソッドにクリックされた時に実行する処理を記述します。
メソッドの引数にはクリックされたアイテムを表すMenuItemオブジェクトが渡され、getGroupId()やgetItemId()によりどのアイテムがクリックされたか判断できるようになっています。
Activity#onOptionsItemSelected()のシグネチャ
public boolean onOptionsItemSelected (MenuItem item)
簡単なオプションメニューのサンプルを紹介します。
オプションメニューをクリックすると、Toastが表示するシンプルなプログラムです。
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 0, 0, "メニュー1").setIcon(R.drawable.ic_launcher); menu.add(0, 10, 1, "メニュー2"); menu.add(0, 20, 2, "メニュー3"); menu.add(0, 30, 3, "メニュー4"); menu.add(0, 40, 4, "メニュー5"); menu.add(0, 50, 5, "メニュー6"); menu.add(0, 60, 5, "メニュー7"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 0 : Toast.makeText(this, "メニュー1がクリックされました", Toast.LENGTH_SHORT).show(); return true; case 10 : Toast.makeText(this, "メニュー2がクリックされました", Toast.LENGTH_SHORT).show(); return true; default : Toast.makeText(this, "オプションメニューがクリックされました", Toast.LENGTH_SHORT).show(); return super.onOptionsItemSelected(item); } } }