メニュー リソースは、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.
}