Ресурс меню

Ресурс меню определяет меню приложения (меню параметров, контекстное меню или подменю), которое можно развернуть с помощью MenuInflater.

Подробнее о том, как добавлять меню…

местоположение файла;
res/menu/filename.xml
Название файла используется в качестве идентификатора ресурса.
скомпилированный тип данных ресурса:
Указатель на ресурс 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>
elements:
Обязательный атрибут. Это должен быть корневой узел. Содержит элементы <item> и/или <group>.

Атрибуты:

xmlns:android
Пространство имен XML. Обязательно. Определяет пространство имен XML, которое должно быть "http://schemas.android.com/apk/res/android".
<item>
Пункт меню. Может содержать элемент <menu> (для подменю). Должен быть дочерним элементом <menu> или <group>.

Атрибуты:

android:id
Идентификатор ресурса. Уникальный идентификатор ресурса. Чтобы создать новый идентификатор ресурса для этого объекта, используйте форму: "@+id/name". Знак плюса указывает на то, что это новый идентификатор.
android:title
Строковый ресурс. Название меню в виде строкового ресурса или необработанной строки.
android:titleCondensed
Строковый ресурс. Сокращенный заголовок в виде строкового ресурса или необработанной строки. Этот заголовок используется, когда обычный заголовок слишком длинный.
android:icon
Прорисовываемый ресурс. Изображение, которое будет использоваться в качестве значка пункта меню.
android:onClick
Название метода. Метод, который вызывается при нажатии на этот пункт меню. Метод должен быть объявлен в действии как общедоступный. В качестве единственного параметра он принимает MenuItem, который указывает на выбранный элемент. Этот метод имеет приоритет над стандартным обратным вызовом onOptionsItemSelected(). Пример приведен в конце этой страницы.

Внимание! Если вы обфусцируете код с помощью ProGuard или аналогичного инструмента, не переименовывайте метод, указанный в этом атрибуте, иначе приложение может перестать работать.

Появился в API уровня 11.

android:showAsAction
Ключевое слово. Когда и как этот элемент появляется в качестве задачи на панели приложения. Пункт меню может отображаться как задача, только если в действии есть панель приложения. Допустимые значения:
ЗначениеОписание
ifRoomРазмещайте этот элемент на панели приложения, только если для него есть место. Если для всех элементов с атрибутом "ifRoom" не хватает места, то элементы с наименьшими значениями orderInCategory отображаются как действия, а остальные – в дополнительном меню.
withTextТакже добавьте к задаче текст заголовка (определяется атрибутом android:title). Это значение можно использовать вместе с другими в качестве набора флагов, разделяя их вертикальной чертой |.
neverНикогда не размещайте этот элемент на панели приложения. Вместо этого добавьте его в дополнительное меню на панели приложения.
alwaysВсегда размещать этот элемент на панели приложения. Используйте это значение, только если элемент должен всегда показываться на панели действий. Если вы настроите несколько элементов так, чтобы они всегда отображались как задачи, они могут перекрывать другие элементы интерфейса на панели приложения.
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
Char. Символ для буквенного сочетания клавиш.
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/name". Знак плюса указывает на то, что это новый идентификатор.
android:checkableBehavior
Ключевое слово. Тип поведения при выборе для группы. Допустимые значения:
ЗначениеОписание
noneЭтот элемент выбрать нельзя.
allВы можете выбрать все элементы, установив флажки.
singleМожно выбрать только один вариант (используйте переключатели).
android:visible
Логическое значение. True, если группа видна.
android:enabled
Логическое значение. True, если группа включена.
android:menuCategory
Ключевое слово. Значение, соответствующее константам Menu CATEGORY_*, которые определяют приоритет группы. Допустимые значения:
ЗначениеОписание
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), а также объявляется обратный вызов при нажатии для двух элементов:

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