메뉴 리소스는 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: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 |
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. 고유한 리소스 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.
}