菜单资源

菜单资源定义应用程序菜单(选项菜单、上下文菜单或子菜单),可以使用 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:actionLayoutandroid: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"表示要触发相应的菜单项,用户需要同时按下ControlShift元键以及快捷键。

您可以使用setAlphabeticShortcut()方法以编程方式设置属性值。有关alphabeticModifier属性的更多信息,请参阅alphabeticModifiers

android:numericModifiers
关键词。菜单项数字快捷键的修饰符。默认值对应于Control键。有效值
描述
META 对应于Meta元键。
CTRL 对应于Control元键。
ALT 对应于Alt元键。
SHIFT 对应于Shift元键。
SYM 对应于Sym元键。
FUNCTION 对应于Function元键。

注意:您可以在一个属性中指定多个关键字。例如,android:numericModifiers="CTRL|SHIFT"表示要触发相应的菜单项,用户需要同时按下ControlShift元键以及快捷键。

您可以使用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
整数。类别中项目的默认顺序。
示例
保存在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.
}