ทรัพยากรของเมนูจะเป็นตัวกำหนดเมนูแอปพลิเคชัน ซึ่งได้แก่ เมนูตัวเลือก เมนูตามบริบท หรือเมนูย่อย
อาจสูงเกินจริงได้ด้วย 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.
}