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 |
ifRoom | Umieść 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. |
withText | Dołą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ą | . |
never | Nigdy nie umieszczaj tego elementu na pasku aplikacji. Zamiast tego wyświetlaj element w rozszerzonym menu na pasku aplikacji. |
always | Zawsze 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. |
collapseActionView | Widok 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 |
container | Dotyczy elementów, które
są częścią kontenera. |
system | W przypadku elementów dostarczonych przez system. |
secondary | Dotyczy elementów, które są dostarczone przez użytkownika jako dodatkowe (rzadko używane) opcje. |
alternative | W 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 |
none | Nie można wybrać. |
all | Można zaznaczyć wszystkie elementy (użyj pól wyboru). |
single | Moż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 |
container | Dotyczy grup, które są częścią kontenera. |
system | Dotyczy grup udostępnianych przez system. |
secondary | Dotyczy to grup, które są podawane przez użytkowników jako dodatkowe (rzadko używane) opcje dodatkowe. |
alternative | Dotyczy 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.
}