Ресурс меню

Ресурс меню определяет меню приложения (меню параметров, контекстное меню или подменю), которое можно заполнить с помощью 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>
элементы:
Необходимый. Это должен быть корневой узел. Содержит элементы <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
Чар . Символ для буквенного сочетания клавиш.
android:numericShortcut
Целое число . Номер для цифровой клавиши быстрого доступа.
android:alphabeticModifiers
Ключевое слово . Модификатор буквенного ярлыка пункта меню. Значение по умолчанию соответствует клавише Control . Допустимые значения:
Ценить Описание
META Соответствует мета-ключу Meta .
CTRL Соответствует метаключу Control .
АЛТ Соответствует мета-ключу Alt .
СДВИГ Соответствует метаклавише Shift .
СИМ Соответствует метаключу Sym .
ФУНКЦИЯ Соответствует метаключу Function .

Примечание . В атрибуте можно указать несколько ключевых слов. Например, android:alphabeticModifiers="CTRL|SHIFT" указывает, что для вызова соответствующего пункта меню пользователю необходимо нажать метаклавиши Control и Shift вместе с ярлыком.

Вы можете использовать метод setAlphabeticShortcut() для установки значений атрибутов программным способом. Дополнительные сведения об атрибуте alphabeticModifier см. в разделе alphabeticModifiers .

android:numericModifiers
Ключевое слово . Модификатор числового ярлыка пункта меню. Значение по умолчанию соответствует клавише Control . Допустимые значения:
Ценить Описание
МЕТА Соответствует мета-ключу Meta .
CTRL Соответствует метаключу Control .
АЛТ Соответствует мета-ключу Alt .
СДВИГ Соответствует метаклавише Shift .
СИМ Соответствует метаключу Sym .
ФУНКЦИЯ Соответствует метаключу Function .

Примечание . В атрибуте можно указать несколько ключевых слов. Например, android:numericModifiers="CTRL|SHIFT" указывает, что для вызова соответствующего пункта меню пользователю необходимо нажать метаклавиши Control и Shift вместе с ярлыком.

Вы можете использовать метод setNumericShortcut() для установки значений атрибутов программным способом. Дополнительные сведения об атрибуте numericModifier см. в разделе numericModifiers .

android:checkable
Логическое значение . Истинно, если элемент можно проверить.
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) , а также объявляет обратный вызов по щелчку для двух элементов:

Котлин

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

Ява

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