แหล่งข้อมูลของเมนู

ทรัพยากรของเมนูจะเป็นตัวกำหนดเมนูแอปพลิเคชัน ซึ่งได้แก่ เมนูตัวเลือก เมนูตามบริบท หรือเมนูย่อย อาจสูงเกินจริงได้ด้วย 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" เครื่องหมายบวกบ่งชี้ว่าข้อความนี้สร้างขึ้นเป็น ID
android:title
ทรัพยากรสตริง ชื่อเมนูเป็นแหล่งข้อมูลสตริงหรือสตริงดิบ
android:titleCondensed
ทรัพยากรสตริง ชื่อแบบย่อเป็นทรัพยากรสตริงหรือสตริงดิบ ช่วงเวลานี้ ชื่อ [title] ในกรณีที่ชื่อปกติยาวเกินไป
android:icon
แหล่งข้อมูลที่ถอนออกได้ รูปภาพที่จะใช้เป็นไอคอนรายการในเมนู
android:onClick
ชื่อเมธอด วิธีเรียกใช้เมื่อมีการคลิกรายการในเมนูนี้ ต้องประกาศไว้ในกิจกรรมเป็นสาธารณะ ยอมรับ MenuItem เป็น พารามิเตอร์เท่านั้น ซึ่งระบุรายการที่ถูกคลิก เมธอดนี้จะมีความสำคัญเหนือมาตรฐาน โทรกลับไปยัง onOptionsItemSelected() โปรดดู ตัวอย่างที่ตอนท้ายของหน้านี้

คำเตือน: หากคุณปรับโค้ดให้ยากต่อการอ่าน (Obfuscate) โดยใช้ 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 เป็นมุมมองการดำเนินการ

สําหรับข้อมูลเพิ่มเติม โปรดดูใช้การดําเนินการ ข้อมูลพร็อพเพอร์ตี้และผู้ให้บริการการดำเนินการ

คำเตือน: หากคุณปรับโค้ดให้ยากต่อการอ่าน (Obfuscate) โดยใช้ ProGuard หรือเครื่องมือที่คล้ายกัน อย่าลืมยกเว้นคลาสที่คุณระบุในแอตทริบิวต์นี้ไม่ให้เปลี่ยนชื่อ เนื่องจากอาจทำให้

เปิดตัวใน API ระดับ 11

android:actionProviderClass
ชื่อชั้นเรียน ชื่อคลาสที่มีคุณสมบัติครบถ้วนเพื่อให้ ActionProvider ใช้แทนรายการการทำงาน ตัวอย่างเช่น "android.widget.ShareActionProvider" เพื่อใช้ ShareActionProvider

สําหรับข้อมูลเพิ่มเติม โปรดดูใช้การดําเนินการ ข้อมูลพร็อพเพอร์ตี้และผู้ให้บริการการดำเนินการ

คำเตือน: หากคุณปรับโค้ดให้ยากต่อการอ่าน (Obfuscate) โดยใช้ ProGuard หรือเครื่องมือที่คล้ายกัน อย่าลืมยกเว้นคลาสที่คุณระบุในแอตทริบิวต์นี้ไม่ให้เปลี่ยนชื่อ เนื่องจากอาจทำให้

เปิดตัวใน API ระดับ 14

android:alphabeticShortcut
แผนภูมิ อักขระสำหรับแป้นพิมพ์ลัดที่เป็นตัวอักษร
android:numericShortcut
จำนวนเต็ม ตัวเลขของแป้นพิมพ์ลัดตัวเลข
android:alphabeticModifiers
คีย์เวิร์ด แป้นกดร่วมสำหรับตัวอักษรของรายการเมนู ทางลัด ค่าเริ่มต้นจะสอดคล้องกับตัวควบคุมตัวควบคุม ค่าที่ถูกต้อง:
ค่าคำอธิบาย
META สอดคล้องกับเมตาคีย์ Meta
Ctrl สอดคล้องกับเมตาคีย์ Control
สำรอง สอดคล้องกับเมตาคีย์ Alt
เปลี่ยน สอดคล้องกับเมตาคีย์ Shift
ระบบ สอดคล้องกับเมตาคีย์ Sym
ฟังก์ชัน สอดคล้องกับเมตาคีย์ Function

หมายเหตุ: คุณสามารถระบุคีย์เวิร์ดได้หลายรายการใน ตัวอย่างเช่น android:alphabeticModifiers="CTRL|SHIFT" บ่งชี้ ในการทริกเกอร์รายการในเมนูที่เกี่ยวข้อง ผู้ใช้ต้อง กดแป้นเมตาทั้ง Control และ Shift ตาม ด้วยทางลัด

คุณสามารถใช้เมธอด setAlphabeticShortcut() เพื่อ กำหนดค่าแอตทริบิวต์แบบเป็นโปรแกรม หากต้องการดูข้อมูลเพิ่มเติม เกี่ยวกับแอตทริบิวต์ alphabeticModifier โปรดดู alphabeticModifiers

android:numericModifiers
คีย์เวิร์ด แป้นกดร่วมสำหรับทางลัดตัวเลขของรายการในเมนู ค่าเริ่มต้นจะสอดคล้องกับแป้น Control ถูกต้อง มีดังนี้
ค่าคำอธิบาย
META สอดคล้องกับเมตาคีย์ Meta
Ctrl สอดคล้องกับเมตาคีย์ Control
สำรอง สอดคล้องกับเมตาคีย์ Alt
เปลี่ยน สอดคล้องกับเมตาคีย์ Shift
ระบบ สอดคล้องกับเมตาคีย์ Sym
ฟังก์ชัน สอดคล้องกับเมตาคีย์ Function

หมายเหตุ: คุณสามารถระบุคีย์เวิร์ดได้หลายรายการใน ตัวอย่างเช่น android:numericModifiers="CTRL|SHIFT" บ่งชี้ ในการทริกเกอร์รายการในเมนูที่เกี่ยวข้อง ผู้ใช้ต้อง กดแป้นเมตาทั้ง Control และ Shift ตาม ด้วยทางลัด

คุณสามารถใช้เมธอด setNumericShortcut() เพื่อตั้งค่า ค่าแอตทริบิวต์แบบเป็นโปรแกรมได้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ แอตทริบิวต์ numericModifier โปรดดู numericModifiers

android:checkable
บูลีน เป็นจริงหากสามารถตรวจสอบรายการได้
android:checked
บูลีน เป็นจริงหากเลือกไว้โดยค่าเริ่มต้น
android:visible
บูลีน เป็นจริงหากรายการปรากฏโดยค่าเริ่มต้น
android:enabled
บูลีน เป็นจริงหากเปิดใช้รายการโดยค่าเริ่มต้น
android:menuCategory
คีย์เวิร์ด ค่าที่สอดคล้องกับ CATEGORY_* ของ Menu คงที่ที่กำหนดลำดับความสำคัญของรายการ ค่าที่ถูกต้อง:
ค่าคำอธิบาย
containerสำหรับรายการที่เป็นส่วนหนึ่งของ คอนเทนเนอร์
systemสำหรับสินค้าที่มาจาก ระบบ
secondaryสำหรับรายการรองที่ผู้ใช้เป็นผู้ระบุ (ไม่ค่อยได้ใช้)
alternativeสำหรับรายการที่เป็นการดำเนินการทางเลือก ในข้อมูลที่แสดงอยู่ในขณะนั้น
android:orderInCategory
จำนวนเต็ม ลำดับความสำคัญของรายการภายในกลุ่ม
<group>
กลุ่มเมนู สำหรับสร้างคอลเล็กชันของรายการที่มีลักษณะเหมือนกัน เช่น มองเห็นได้ เปิดใช้ หรือเลือกได้ มีองค์ประกอบ <item> อย่างน้อย 1 รายการ ต้องเป็น ย่อยขององค์ประกอบ <menu>

แอตทริบิวต์:

android:id
รหัสทรัพยากร รหัสทรัพยากรที่ไม่ซ้ำกัน วิธีสร้างรหัสทรัพยากรใหม่สำหรับรายการนี้ ใช้แบบฟอร์ม: "@+id/name" เครื่องหมายบวกบ่งชี้ว่าข้อความนี้สร้างขึ้นเป็น ID
android:checkableBehavior
คีย์เวิร์ด ประเภทของพฤติกรรมที่เลือกได้สำหรับกลุ่ม ค่าที่ถูกต้อง:
ค่าคำอธิบาย
noneเลือกไม่ได้
allเลือกได้ทั้งหมด (ใช้ช่องทำเครื่องหมาย)
singleสามารถเลือกได้เพียงรายการเดียว (ใช้ปุ่มตัวเลือก )
android:visible
บูลีน เป็นจริงหากมองเห็นกลุ่มได้
android:enabled
บูลีน เป็นจริงหากเปิดใช้กลุ่มแล้ว
android:menuCategory
คีย์เวิร์ด ค่าที่สอดคล้องกับ CATEGORY_* ของ Menu ค่าคงที่ที่กำหนดลำดับความสำคัญของกลุ่ม ค่าที่ถูกต้อง:
ค่าคำอธิบาย
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>

รหัสแอปพลิเคชันต่อไปนี้ทำให้เมนูเพิ่มขึ้นจาก Callback onCreateOptionsMenu(Menu) และยังประกาศเมื่อคลิก Callback สำหรับ 2 รายการดังนี้

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