June 16, 2012

オプションメニューの表示

オプションメニューの表示方法です。メニューボタンを押すと表示されるオプションメニューのことです。

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