菜单资源
使用收藏夹保持井井有条 根据您的喜好保存和分类内容。
菜单资源定义应用程序菜单(选项菜单、上下文菜单或子菜单),可以使用 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
- 关键字。菜单项字母快捷键的修饰符。默认值对应于Control键。有效值
值 | 描述 |
META |
对应于Meta元键。 |
CTRL |
对应于Control元键。 |
ALT |
对应于Alt元键。 |
SHIFT |
对应于Shift元键。 |
SYM |
对应于Sym元键。 |
FUNCTION |
对应于Function元键。 |
注意:您可以在一个属性中指定多个关键字。例如,android:alphabeticModifiers="CTRL|SHIFT"
表示要触发相应的菜单项,用户需要同时按下Control和Shift元键以及快捷键。
您可以使用setAlphabeticShortcut()
方法以编程方式设置属性值。有关alphabeticModifier
属性的更多信息,请参阅alphabeticModifiers
。
android:numericModifiers
- 关键字。菜单项数字快捷键的修饰符。默认值对应于Control键。有效值
值 | 描述 |
META |
对应于Meta元键。 |
CTRL |
对应于Control元键。 |
ALT |
对应于Alt元键。 |
SHIFT |
对应于Shift元键。 |
SYM |
对应于Sym元键。 |
FUNCTION |
对应于Function元键。 |
注意:您可以在一个属性中指定多个关键字。例如,android:numericModifiers="CTRL|SHIFT"
表示要触发相应的菜单项,用户需要同时按下Control和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>
- 菜单组,用于创建共享特征(例如,是否可见、已启用或可选)的项的集合。包含一个或多个
<item>
元素。必须是<menu>
元素的子元素。属性
android:id
- 资源 ID。唯一的资源 ID。要为此项创建一个新的资源 ID,请使用以下格式:
"@+id/name"
。加号表示将其创建为新的 ID。
android:checkableBehavior
- 关键字。组的可选择行为类型。有效值
值 | 描述 |
none | 不可选择。 |
all | 所有项都可选(使用复选框)。 |
single | 只能选择一项(使用单选按钮)。 |
android:visible
- 布尔值。如果该组可见,则为 true。
android:enabled
- 布尔值。如果该组已启用,则为 true。
android:menuCategory
- 关键字。对应于
Menu
CATEGORY_*
常量的值,这些常量定义了该组的优先级。有效值
值 | 描述 |
container | 对于属于容器一部分的组。 |
system | 对于系统提供的组。 |
secondary | 对于用户提供的辅助(不常用)选项。 |
alternative | 对于当前显示的数据的替代操作。 |
android:orderInCategory
- 整数。类别中项的默认顺序。
- example
- 保存在
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)
回调中加载菜单,并声明了两个项的点击回调
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.
}
此页面上的内容和代码示例受内容许可中描述的许可的约束。Java 和 OpenJDK 是 Oracle 和/或其关联公司的商标或注册商标。
上次更新时间:2024-01-03 UTC。
[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"缺少我需要的信息" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"过于复杂/步骤过多" },{ "type": "thumb-down", "id": "outOfDate", "label":"已过时" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"示例/代码问题" },{ "type": "thumb-down", "id": "otherDown", "label":"其他" }]
[{ "type": "thumb-up", "id": "easyToUnderstand", "label":"易于理解" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"解决了我的问题" },{ "type": "thumb-up", "id": "otherUp", "label":"其他" }]
{ "lastModified": "上次更新时间:2024-01-03 UTC.", "confidential": False }