作り方は、menuリソース(xml)を作成し、res/menuにおきます。初期化時に1回だけonCreateOptionsMenu()が呼ばれるので、そこでメニューアイテムを登録し、メニューアイテムが選択されるとonOptionsItemSelected()が呼ばれるので、そこに押された時の処理を加えます。
例)4つのメニューアイテムを持つ場合
public class SampleAppActivity extends Activity { private final static String TAB = "SampleAppActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.mymenu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { boolean ret = true; switch (item.getItemId()) { case R.id.item1: Log.i(TAB, "Menu item 1"); break; case R.id.item2: Log.i(TAB, "Menu item 2"); break; case R.id.item3: Log.i(TAB, "Menu item 3"); break; case R.id.item4: Log.i(TAB, "Menu item 4"); break; default: ret = super.onOptionsItemSelected(item); } return ret; } }
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item1" android:title="@string/menu1" android:icon="@android:drawable/ic_menu_add"></item> <item android:id="@+id/item2" android:title="@string/menu2"></item> <item android:id="@+id/item3" android:title="@string/menu3"></item> <item android:id="@+id/item4" android:title="@string/menu4"></item> </menu>
メニュー1だけシステムの画像を設定して表示していますが、独自の画像を使うこともできます(デザイン方法は参考を参照)。メニューアイテムは最大6つまで同時に表示され、それ以上は6つ目のアイテムがMoreにかわり、ダイアログがでて6つ以上のメニューアイテムも選択できます。
Android 2.3(API 10)までのデバイスで実行すると下記のように表示されます。
Android 3.0(API 11)以降のデバイスで実行すると下記のように表示されます。
この違いは、今回の手法がAndroid2.3(API 10)までを対象としたやり方のためです。Android 3.0からは物理的なメニューボタンを必須からオプション扱いにしたため、それにあわせてオプションメニューに対するUIも変更したからです。Android 3.0からはAction Barというものが表示されるようになり、基本的にオプションメニューはそこに表示して、よりダイレクトに選択できるUIにかえています。
Android 3.0以降でもAction Barなしのテーマを選択している場合、Action BarがないのでAndroid 2.3以前と同様な表示になります。
参考:Android Developers:Activity
参考:Android Developers:Say Goodbye to the Menu Button
参考:Android Developers:Menu Icons
No comments:
Post a Comment