Zasób menu

Zasób menu definiuje menu aplikacji – menu opcji, menu kontekstowe lub podmenu, które można powiększyć za pomocą atrybutu MenuInflater.

Instrukcje korzystania z menu znajdziesz w artykule Dodawanie menu.

lokalizacja pliku:
res/menu/filename.xml
Jako identyfikator zasobu jest używana nazwa pliku
typ danych skompilowanych zasobów:
Wskaźnik zasobu do zasobu Menu (lub podklasy)
odniesienie do zasobów:
W Javie: R.menu.filename
W pliku XML: @[package:]menu.filename
składnia:
<?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>
elementy:
Wymagane. Musi to być węzeł główny. Zawiera elementy <item> lub <group>.

Atrybuty:

xmlns:android
Przestrzeń nazw XML. Wymagane. Określa przestrzeń nazw XML, którą musi być "http://schemas.android.com/apk/res/android".
<item>
Pozycja w menu. Może zawierać element <menu> (podmenu). Musi być elementem podrzędnym elementu <menu> lub <group>.

Atrybuty:

android:id
Identyfikator zasobu. Unikalny identyfikator zasobu. Aby utworzyć nowy identyfikator zasobu dla tego elementu, użyj formularza: "@+id/name". Symbol plusa oznacza, że identyfikator jest tworzony jako nowy.
android:title
Zasób z ciągiem znaków. Tytuł menu w postaci zasobu tekstowego lub nieprzetworzonego ciągu znaków.
android:titleCondensed
Zasób z ciągiem znaków. Skrócony tytuł w postaci zasobu tekstowego lub nieprzetworzonego ciągu znaków. Jest on używany, gdy zwykły tytuł jest za długi.
android:icon
Zasób rysowalny. Obraz, który posłuży za ikonę pozycji menu.
android:onClick
Nazwa metody. Metoda wywoływania po kliknięciu tego elementu menu. Metoda musi być zadeklarowana w działaniu jako publiczna. Akceptuje on MenuItem jako jedyny parametr, który wskazuje kliknięty element. Ta metoda ma pierwszeństwo przed standardowym wywołaniem zwrotnym onOptionsItemSelected(). Zobacz przykład na końcu tej strony.

Ostrzeżenie: jeśli zaciemniasz kod za pomocą ProGuard lub podobnego narzędzia, pamiętaj, aby wykluczyć metodę określoną w tym atrybucie ze zmiany nazwy, ponieważ może to zakłócić działanie funkcji.

Wprowadzona na poziomie API 11.

android:showAsAction
Słowo kluczowe. Kiedy i jak ten element wyświetla się jako działanie na pasku aplikacji. Pozycja menu może pojawić się jako działanie tylko wtedy, gdy aktywność zawiera pasek aplikacji. Prawidłowe wartości:
WartośćOpis
ifRoomUmieść ten element na pasku aplikacji tylko wtedy, gdy jest na niego miejsce. Jeśli brakuje miejsca na wszystkie elementy oznaczone jako "ifRoom", elementy z najniższymi wartościami orderInCategory są wyświetlane jako działania, a pozostałe elementy są wyświetlane w rozszerzonym menu.
withTextDołącz też tekst tytułu (zdefiniowany za pomocą elementu android:title) z działaniem. Tę wartość możesz dołączyć do jednej z pozostałych jako flagi, rozdzielając je pionową kreską |.
neverNigdy nie umieszczaj tego elementu na pasku aplikacji. Zamiast tego wyświetlaj element w rozszerzonym menu na pasku aplikacji.
alwaysZawsze umieszczaj ten element na pasku aplikacji. Nie używaj jej, chyba że ważne jest, aby element zawsze pojawiał się na pasku działań. Jeśli ustawisz wiele elementów tak, by zawsze były widoczne jako działania, mogą się one pokrywać z innymi elementami interfejsu na pasku aplikacji.
collapseActionViewWidok działań powiązany z tym działaniem (zadeklarowany przez zasady android:actionLayout lub android:actionViewClass) można zwijać.
Wprowadzono go na poziomie 14 interfejsu API.

Więcej informacji znajdziesz w artykule Dodawanie paska aplikacji.

Wprowadzona na poziomie API 11.

android:actionLayout
Zasób Układ. Układ, który będzie używany jako widok działań.

Więcej informacji znajdziesz w artykule na temat korzystania z widoków działań i dostawców działań.

Wprowadzona na poziomie API 11.

android:actionViewClass
Nazwa zajęć. Pełna nazwa klasy, której View może używać jako widoku działania. np. "android.widget.SearchView", aby użyć danych SearchView jako widoku działania.

Więcej informacji znajdziesz w artykule na temat korzystania z widoków działań i dostawców działań.

Ostrzeżenie: jeśli zaciemniasz kod za pomocą ProGuard lub podobnego narzędzia, pamiętaj, aby wykluczyć klasę określoną w tym atrybucie ze zmiany nazwy, ponieważ może to zakłócić działanie funkcji.

Wprowadzona na poziomie API 11.

android:actionProviderClass
Nazwa zajęć. Pełna nazwa klasy, której ActionProvider może używać zamiast działania. np. "android.widget.ShareActionProvider", aby użyć właściwości ShareActionProvider.

Więcej informacji znajdziesz w artykule na temat korzystania z widoków działań i dostawców działań.

Ostrzeżenie: jeśli zaciemniasz kod za pomocą ProGuard lub podobnego narzędzia, pamiętaj, aby wykluczyć klasę określoną w tym atrybucie ze zmiany nazwy, ponieważ może to zakłócić działanie funkcji.

Wprowadzona na poziomie API 14.

android:alphabeticShortcut
Char Znak alfabetu klawisza skrótu.
android:numericShortcut
Liczba całkowita. Liczba numerycznego klawisza skrótu.
android:alphabeticModifiers
Słowo kluczowe. Modyfikator skrótu alfabetycznego elementu menu. Wartość domyślna odpowiada kluczowi Control. Prawidłowe wartości:
WartośćOpis
META Odpowiada metakluczowi meta.
CTRL Odpowiada metaklawiszowi Control.
ALT Odpowiada metaklawiszowi Alt.
SHIFT Odpowiada klawiszowi Shift.
SYM, Odpowiada kluczowi meta Sym.
FUNKCJA Odpowiada metaklawiszowi funkcji.

Uwaga: w atrybucie możesz określić wiele słów kluczowych. Na przykład android:alphabeticModifiers="CTRL|SHIFT" oznacza, że aby wywołać odpowiednią pozycję menu, użytkownik musi nacisnąć jednocześnie klawisze meta Control i Shift.

Aby automatycznie ustawiać wartości atrybutów, możesz użyć metody setAlphabeticShortcut(). Więcej informacji o atrybucie alphabeticModifier znajdziesz tutaj: alphabeticModifiers.

android:numericModifiers
Słowo kluczowe. Modyfikator skrótu numerycznego elementu menu. Wartość domyślna odpowiada kluczowi Control. Prawidłowe wartości:
WartośćOpis
META Odpowiada metakluczowi meta.
CTRL Odpowiada metaklawiszowi Control.
ALT Odpowiada metaklawiszowi Alt.
SHIFT Odpowiada klawiszowi Shift.
SYM, Odpowiada kluczowi meta Sym.
FUNKCJA Odpowiada metaklawiszowi funkcji.

Uwaga: w atrybucie możesz określić wiele słów kluczowych. Na przykład android:numericModifiers="CTRL|SHIFT" oznacza, że aby wywołać odpowiednią pozycję menu, użytkownik musi nacisnąć jednocześnie klawisze meta Control i Shift.

Aby automatycznie ustawiać wartości atrybutów, możesz użyć metody setNumericShortcut(). Więcej informacji o atrybucie numericModifier znajdziesz w sekcji numericModifiers.

android:checkable
Wartość logiczna. Prawda, jeśli element można zaznaczyć.
android:checked
Wartość logiczna. Prawda, jeśli element jest zaznaczony domyślnie.
android:visible
Wartość logiczna. Prawda, jeśli element jest domyślnie widoczny.
android:enabled
Wartość logiczna. Prawda, jeśli element jest domyślnie włączony.
android:menuCategory
Słowo kluczowe. Wartość odpowiadająca stałym Menu CATEGORY_*, które określają priorytet elementu. Prawidłowe wartości:
WartośćOpis
containerDotyczy elementów, które są częścią kontenera.
systemW przypadku elementów dostarczonych przez system.
secondaryDotyczy elementów, które są dostarczone przez użytkownika jako dodatkowe (rzadko używane) opcje.
alternativeW przypadku elementów, które są alternatywnymi działaniami na obecnie wyświetlanych danych.
android:orderInCategory
Liczba całkowita. Kolejność ważności elementów w grupie.
<group>
Grupa menu do tworzenia kolekcji elementów o wspólnych cechach, takich jak to, czy są one widoczne, włączone lub możliwe do wyboru. Zawiera co najmniej 1 element <item>. Musi być elementem podrzędnym elementu <menu>.

Atrybuty:

android:id
Identyfikator zasobu. Unikalny identyfikator zasobu. Aby utworzyć nowy identyfikator zasobu dla tego elementu, użyj formularza: "@+id/name". Symbol plusa oznacza, że identyfikator jest tworzony jako nowy.
android:checkableBehavior
Słowo kluczowe. Typ działania, które można wybrać dla grupy. Prawidłowe wartości:
WartośćOpis
noneNie można wybrać.
allMożna zaznaczyć wszystkie elementy (użyj pól wyboru).
singleMożna wybrać tylko jeden element (użyj przycisków).
android:visible
Wartość logiczna. Prawda, jeśli grupa jest widoczna.
android:enabled
Wartość logiczna. Prawda, jeśli grupa jest włączona.
android:menuCategory
Słowo kluczowe. Wartość odpowiadająca stałym Menu CATEGORY_*, które określają priorytet grupy. Prawidłowe wartości:
WartośćOpis
containerDotyczy grup, które są częścią kontenera.
systemDotyczy grup udostępnianych przez system.
secondaryDotyczy to grup, które są podawane przez użytkowników jako dodatkowe (rzadko używane) opcje dodatkowe.
alternativeDotyczy grup, które są alternatywnymi działaniami na obecnie wyświetlanych danych.
android:orderInCategory
Liczba całkowita. Domyślna kolejność elementów w kategorii.
przykład:
Plik XML zapisany o 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>

Ten kod aplikacji rozszerza menu z wywołania zwrotnego onCreateOptionsMenu(Menu) i deklaruje wywołanie zwrotne po kliknięciu w przypadku 2 elementów:

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