作り方は、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