메뉴 리소스

메뉴 리소스는 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"는 상응하는 메뉴 항목을 트리거하기 위해 사용자가 ControlShift 메타 키와 함께 단축키를 눌러야 하는 것을 의미합니다.

setAlphabeticShortcut() 메서드를 사용하여 프로그래매틱 방식으로 속성 값을 설정할 수 있습니다. alphabeticModifier 속성에 관한 자세한 내용은 alphabeticModifiers를 참고하세요.

android:numericModifiers
키워드. 메뉴 항목의 숫자 단축키의 특수키입니다. 기본값은 Control 키입니다. 유효한 값은 다음과 같습니다.
설명
META Meta 메타 키입니다.
CTRL Control 메타 키입니다.
ALT Alt 메타 키입니다.
SHIFT Shift 메타 키입니다.
SYM Sym 메타 키입니다.
FUNCTION Function 메타 키입니다.

참고: 속성에 키워드를 여러 개 지정할 수 있습니다. 예를 들어, android:numericModifiers="CTRL|SHIFT"는 상응하는 메뉴 항목을 트리거하기 위해 사용자가 ControlShift 메타 키와 함께 단축키를 눌러야 하는 것을 의미합니다.

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