メニュー リソース

メニュー リソースは、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
キーワード。アイテムの優先度を定義する Menu CATEGORY_* 定数に対応する値を設定します。有効な値は次のとおりです。
説明
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
キーワード。グループの優先度を定義する Menu CATEGORY_* 定数に対応する値を設定します。有効な値は次のとおりです。
説明
containerコンテナの一部であるグループの場合。
systemシステムによって提供されるグループの場合。
secondaryユーザー指定のセカンダリ オプション(使用頻度の低いオプション)となるグループの場合。
alternative現在表示されているデータに対する代替アクションとなるグループの場合。
android:orderInCategory
整数。このアイテムのカテゴリ内のデフォルト順位。
例:
res/menu/example_menu.xml に保存された 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 Activity.onOptionsItemSelected.
}

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 Activity.onOptionsItemSelected.
}