メニュー リソース

メニュー リソースは、MenuInflater でインフレートできるアプリメニュー(オプション メニュー、コンテキスト メニュー、サブメニュー)を定義します。

メニューの使用方法については、メニューをご覧ください。

ファイルの場所:
res/menu/filename.xml
ファイル名はリソース ID として使用されます。
コンパイル済みリソースのデータ型:
Menu(またはサブクラス)リソースへのリソース ポインタ。
リソース参照:
Java の場合: R.menu.filename
XML の場合: @[package:]menu.filename
構文:
    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@[+][package:]id/resource_name"
              android:title="string"
              android:titleCondensed="string"
              android:icon="@[package:]drawable/drawable_resource_name"
              android:onClick="method name"
              android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
              android:actionLayout="@[package:]layout/layout_resource_name"
              android:actionViewClass="class name"
              android:actionProviderClass="class name"
              android:alphabeticShortcut="string"
              android:alphabeticModifiers=["META" | "CTRL" | "ALT" | "SHIFT" | "SYM" | "FUNCTION"]
              android:numericShortcut="string"
              android:numericModifiers=["META" | "CTRL" | "ALT" | "SHIFT" | "SYM" | "FUNCTION"]
              android:checkable=["true" | "false"]
              android:visible=["true" | "false"]
              android:enabled=["true" | "false"]
              android:menuCategory=["container" | "system" | "secondary" | "alternative"]
              android:orderInCategory="integer" />
        <group android:id="@[+][package:]id/resource name"
               android:checkableBehavior=["none" | "all" | "single"]
               android:visible=["true" | "false"]
               android:enabled=["true" | "false"]
               android:menuCategory=["container" | "system" | "secondary" | "alternative"]
               android:orderInCategory="integer" >
            <item />
        </group>
        <item >
            <menu>
              <item />
            </menu>
        </item>
    </menu>
    
要素:
必須。ルートノードにする必要があります。<item> 要素や <group> 要素を格納します。

属性:

xmlns:android
XML 名前空間。必須。XML 名前空間を定義します。"http://schemas.android.com/apk/res/android" にする必要があります。
<item>
メニュー項目。<menu> 要素を格納することができます(サブメニュー用)。<menu> 要素または <group> 要素の子にする必要があります。

属性:

android:id
リソース ID。一意のリソース ID。このアイテムの新しいリソース ID を作成するには、"@+id/name" の形式を使用します。プラス記号は、これが新しい ID として作成されることを示します。
android:title
文字列リソース。メニュー タイトル。文字列リソースまたは未加工の文字列として指定します。
android:titleCondensed
文字列リソース。短縮形のタイトル。文字列リソースまたは未加工の文字列として指定します。このタイトルは、通常のタイトルが長すぎる場合に使用されます。
android:icon
ドローアブル リソース。メニュー項目のアイコンとして使用する画像。
android:onClick
メソッド名。このメニュー項目がタップされたときに呼び出すメソッド。このメソッドは、アクティビティ内でパブリックとして宣言する必要があります。また、タップされたアイテムを示す MenuItem を唯一のパラメータとして受け入れる必要があります。このメソッドは、onOptionsItemSelected() に対する標準コールバックよりも優先されます。下の例をご覧ください。

警告: ProGuard(または同様のツール)を使用してコードを難読化する場合、機能が損なわれるおそれがあるため、この属性で指定するメソッドを名前変更から除外するようにしてください。

API レベル 11 で導入されました。

android:showAsAction
キーワード。このアイテムがアプリバーにアクション アイテムとして表示されるタイミングと方法を指定します。メニュー項目は、アクティビティ内にアプリバーが含まれる場合に限り、アクション アイテムとして表示できます。有効な値:
説明
ifRoomスペースがある場合に限り、このアイテムをアプリバー内に配置します。"ifRoom" としてマーキングされているすべてのアイテムを配置できるスペースがない場合は、orderInCategory 値が最も小さいアイテムがアクションとして表示され、残りのアイテムはオーバーフロー メニュー内に表示されます。
withTextアクション アイテムと一緒にタイトル テキスト(android:title で定義)も組み込みます。この値は、他の値と一緒にフラグセットとして組み込むことができます。その場合は、パイプ記号(|)で区切ります。
neverこのアイテムは、アプリバー内に配置しません。代わりに、アプリバーのオーバーフロー メニュー内にアイテムをリスト表示します。
alwaysアプリバー内に常にこのアイテムを配置します。アイテムが常にアクションバー内に表示されていることが重要でない限り、この値は使用しないでください。複数のアイテムを常にアクション アイテムとして表示するように設定すると、アプリバー内の他の UI と重なって表示される場合があります。
collapseActionViewこのアクション アイテムに関連付けられているアクション ビュー(android:actionLayout または android:actionViewClass で宣言)が折りたたみ可能になります。
API レベル 14 で導入されました。

詳細については、アプリバーを追加するをご覧ください。

API レベル 11 で導入されました。

android:actionLayout
レイアウト リソース。アクション ビューとして使用するレイアウト。

詳細については、アクション ビューとアクション プロバイダをご覧ください。

API レベル 11 で導入されました。

android:actionViewClass
クラス名。アクション ビューとして使用する View の完全修飾クラス名。たとえば、"android.widget.SearchView" の場合、SearchView をアクション ビューとして使用します。

詳細については、アクション ビューとアクション プロバイダをご覧ください。

警告: ProGuard(または同様のツール)を使用してコードを難読化する場合、機能が損なわれるおそれがあるため、この属性で指定するクラスを名前変更から除外するようにしてください。

API レベル 11 で導入されました。

android:actionProviderClass
クラス名。アクション アイテムの代わりに使用する ActionProvider の完全修飾クラス名。たとえば、"android.widget.ShareActionProvider" の場合、ShareActionProvider を使用します。

詳細については、アクション ビューとアクション プロバイダをご覧ください。

警告: ProGuard(または同様のツール)を使用してコードを難読化する場合、機能が損なわれるおそれがあるため、この属性で指定するクラスを名前変更から除外するようにしてください。

API レベル 14 で導入されました。

android:alphabeticShortcut
文字。アルファベット ショートカット キーの文字。
android:numericShortcut
整数。数値ショートカット キーの数値。
android:alphabeticModifiers
キーワード。メニュー項目のアルファベット ショートカットの修飾子。デフォルト値は Ctrl キーに対応します。有効な値:
説明
META Meta メタキーに対応します。
CTRL Ctrl メタキーに対応します。
ALT Alt メタキーに対応します。
SHIFT Shift メタキーに対応します。
SYM Sym メタキーに対応します。
FUNCTION Function メタキーに対応します。

: 1 つの属性内に複数のキーワードを指定できます。たとえば、android:alphabeticModifiers="CTRL|SHIFT" の場合、対応するメニュー項目をトリガーするには、ショートカットと一緒に Ctrl メタキーと Shift メタキーの両方を押す必要があることを示します。

setAlphabeticShortcut() メソッドを使用すると、属性値をプログラムによって設定できます。alphabeticModifier 属性の詳細については、alphabeticModifiers をご覧ください。

android:numericModifiers
キーワード。メニュー項目の数値ショートカットの修飾子。デフォルト値は Ctrl キーに対応します。有効な値:
説明
META Meta メタキーに対応します。
CTRL Ctrl メタキーに対応します。
ALT Alt メタキーに対応します。
SHIFT Shift メタキーに対応します。
SYM Sym メタキーに対応します。
FUNCTION Function メタキーに対応します。

: 1 つの属性内に複数のキーワードを指定できます。たとえば、android:numericModifiers="CTRL|SHIFT" の場合、対応するメニュー項目をトリガーするには、ショートカットと一緒に Ctrl メタキーと Shift メタキーの両方を押す必要があることを示します。

setNumericShortcut() メソッドを使用すると、属性値をプログラムによって設定できます。numericModifier 属性の詳細については、numericModifiers をご覧ください。

android:checkable
ブール値。アイテムがチェック可能な場合は「true」に設定します。
android:checked
ブール値。デフォルトでアイテムのチェックボックスをオンにする場合は「true」に設定します。
android:visible
ブール値。デフォルトでアイテムを表示する場合は「true」に設定します。
android:enabled
ブール値。デフォルトでアイテムを有効状態にする場合は「true」に設定します。
android:menuCategory
キーワード。アイテムの優先度を定義する MenuCATEGORY_* 定数に対応する値。有効な値:
説明
containerコンテナの一部であるアイテムの場合。
systemシステムによって提供されるアイテムの場合。
secondaryユーザー指定のセカンダリ オプション(使用頻度の低いオプション)となるアイテムの場合。
alternative現在表示されているデータに対する代替アクションとなるアイテムの場合。
android:orderInCategory
整数。このアイテムのグループ内の「重要度」の順位。
<group>
メニュー グループ。表示、有効、チェック可能といった特性を共有するアイテムのコレクションを作成します。1 つまたは複数の <item> 要素を格納します。この要素は、<menu> 要素の子要素にする必要があります。

属性:

android:id
リソース ID。一意のリソース ID。このアイテムの新しいリソース ID を作成するには、"@+id/name" の形式を使用します。プラス記号は、これが新しい ID として作成されることを示します。
android:checkableBehavior
キーワード。グループのチェック可能動作のタイプ。有効な値:
説明
noneチェック可能なアイテムはありません。
allすべてのアイテムがチェック可能です(チェックボックスを使用します)。
singleチェック可能なアイテムは 1 つだけです(ラジオボタンを使用します)。
android:visible
ブール値。グループを表示する場合は「true」に設定します。
android:enabled
ブール値。グループを有効状態にする場合は「true」に設定します。
android:menuCategory
キーワード。グループの優先度を定義する MenuCATEGORY_* 定数に対応する値。有効な値:
説明
containerコンテナの一部であるグループの場合。
systemシステムによって提供されるグループの場合。
secondaryユーザー指定のセカンダリ オプション(使用頻度の低いオプション)となるグループの場合。
alternative現在表示されているデータに対する代替アクションとなるグループの場合。
android:orderInCategory
整数。このアイテムのカテゴリ内のデフォルト順位。
例:
次の XML ファイルを res/menu/example_menu.xml に保存するとします。
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
        <item android:id="@+id/item1"
              android:title="@string/item1"
              android:icon="@drawable/group_item1_icon"
              app:showAsAction="ifRoom|withText"/>
        <group android:id="@+id/group">
            <item android:id="@+id/group_item1"
                  android:onClick="onGroupItemClick"
                  android:title="@string/group_item1"
                  android:icon="@drawable/group_item1_icon" />
            <item android:id="@+id/group_item2"
                  android:onClick="onGroupItemClick"
                  android:title="@string/group_item2"
                  android:icon="@drawable/group_item2_icon" />
        </group>
        <item android:id="@+id/submenu"
              android:title="@string/submenu_title"
              app:showAsAction="ifRoom|withText" >
            <menu>
                <item android:id="@+id/submenu_item1"
                      android:title="@string/submenu_item1" />
            </menu>
        </item>
    </menu>
    

次のアプリコードは、onCreateOptionsMenu(Menu) コールバックからメニューをインフレートし、2 つのアイテムのオンクリック コールバックも宣言します。

Kotlin

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.example_menu, menu)
        return true
    }

    fun onGroupItemClick(item: MenuItem) {
        // One of the group items (using the onClick attribute) was clicked
        // The item parameter passed here indicates which item it is
        // All other menu item clicks are handled by <code><a href="/reference/android/app/Activity.html#onOptionsItemSelected(android.view.MenuItem)">onOptionsItemSelected()</a></code>
    }
    

Java

    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.example_menu, menu);
        return true;
    }

    public void onGroupItemClick(MenuItem item) {
        // One of the group items (using the onClick attribute) was clicked
        // The item parameter passed here indicates which item it is
        // All other menu item clicks are handled by <code><a href="/reference/android/app/Activity.html#onOptionsItemSelected(android.view.MenuItem)">onOptionsItemSelected()</a></code>
    }