ในไลบรารีของ AndroidX
Toolbar
มี
วิธีต่างๆ ในการโต้ตอบกับแอปของคุณ
เพิ่มและจัดการการดำเนินการอธิบายวิธีการ
กำหนดการดำเนินการ ซึ่งอาจเป็นปุ่มหรือรายการในเมนู เอกสารนี้อธิบายวิธีเพิ่ม
องค์ประกอบที่มีประโยชน์ 2 อย่าง ได้แก่
- มุมมองการทำงานคือการดำเนินการที่มีฟังก์ชันการทำงานที่สมบูรณ์ภายในแถบแอป สำหรับ เช่น มุมมองการดำเนินการค้นหาช่วยให้ผู้ใช้พิมพ์ข้อความค้นหาในแถบแอปได้โดยไม่ต้อง เพื่อเปลี่ยนกิจกรรมหรือส่วนย่อยได้
- ผู้ให้บริการการดําเนินการคือการดําเนินการที่มีเลย์เอาต์ที่ปรับแต่งของตัวเอง การดำเนินการเริ่มต้น ปรากฏเป็นปุ่มหรือรายการในเมนู เมื่อผู้ใช้แตะการดำเนินการ ผู้ให้บริการการดำเนินการจะควบคุม ของการดำเนินการตามที่คุณกำหนด ตัวอย่างเช่น ผู้ให้บริการการดำเนินการอาจตอบกลับ ให้แตะ โดยแสดงเมนู
AndroidX มีมุมมองการดำเนินการพิเศษและวิดเจ็ตผู้ให้บริการการดำเนินการมากมาย ตัวอย่างเช่น พารามิเตอร์
วิดเจ็ต SearchView
จะใช้มุมมองการทำงานสำหรับป้อนข้อความค้นหา
ShareActionProvider
วิดเจ็ตจะใช้ผู้ให้บริการดำเนินการเพื่อแชร์ข้อมูลกับแอปอื่นๆ นอกจากนี้ คุณยังสามารถระบุ
มุมมองการดำเนินการและผู้ให้บริการการดำเนินการของคุณเอง
เพิ่มมุมมองการดำเนินการ
หากต้องการเพิ่มมุมมองการดำเนินการ ให้สร้าง
<item>
ในทรัพยากรเมนูของแถบเครื่องมือ ตามที่อธิบายไว้ใน
เพิ่มและจัดการการดำเนินการ เพิ่มแอตทริบิวต์ใดแอตทริบิวต์หนึ่งต่อไปนี้ลงใน
องค์ประกอบ <item>
:
actionViewClass
: คลาสของวิดเจ็ตที่ใช้ดำเนินการactionLayout
: ทรัพยากรเลย์เอาต์ที่อธิบายคอมโพเนนต์ของการดำเนินการ
ตั้งค่าแอตทริบิวต์ showAsAction
เป็น "ifRoom|collapseActionView"
หรือ
"never|collapseActionView"
ธงcollapseActionView
ระบุวิธีการ
แสดงวิดเจ็ตเมื่อผู้ใช้ไม่ได้โต้ตอบกับวิดเจ็ต หากวิดเจ็ตอยู่บนแถบแอป แอป
แสดงวิดเจ็ตเป็นไอคอน หากวิดเจ็ตอยู่ในเมนูรายการเพิ่มเติม แอปจะแสดงวิดเจ็ต
เป็นรายการเมนู เมื่อผู้ใช้โต้ตอบกับมุมมองการดำเนินการ มุมมองจะขยายจนเต็มแถบแอป
ตัวอย่างเช่น โค้ดต่อไปนี้จะเพิ่มวิดเจ็ต SearchView
ลงในแถบแอป
<item android:id="@+id/action_search"
android:title="@string/action_search"
android:icon="@drawable/ic_search"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="androidx.appcompat.widget.SearchView" />
หากผู้ใช้ไม่ได้โต้ตอบกับวิดเจ็ต แอปจะแสดงวิดเจ็ตเป็นไอคอนที่ระบุไว้
โดย android:icon
หากไม่มีที่ว่างในแถบแอป แอปจะเพิ่มการดำเนินการลงใน
เมนูรายการเพิ่มเติม
เมื่อผู้ใช้แตะไอคอนหรือรายการเมนู วิดเจ็ตจะขยายเพื่อเติมแถบเครื่องมือ เพื่อให้ โต้ตอบกับผู้ใช้
ถ้าต้องการกำหนดค่าการดำเนินการ ให้ดำเนินการใน
onCreateOptionsMenu()
Callback คุณสามารถดูการอ้างอิงออบเจ็กต์ของมุมมองการทำงานได้โดยเรียกใช้เมธอด
getActionView()
ตัวอย่างเช่น โค้ดต่อไปนี้ได้รับการอ้างอิงออบเจ็กต์สำหรับ SearchView
วิดเจ็ตที่กำหนดในตัวอย่างโค้ดก่อนหน้านี้
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main_activity_actions, menu)
val searchItem = menu?.findItem(R.id.action_search)
val searchView = searchItem?.actionView as SearchView
// Configure the search info and add any event listeners.
return super.onCreateOptionsMenu(menu)
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_activity_actions, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView =
(SearchView) searchItem.getActionView();
// Configure the search info and add any event listeners.
return super.onCreateOptionsMenu(menu);
}
ตอบสนองต่อการขยายมุมมองการดำเนินการ
หากองค์ประกอบ <item>
ของการดำเนินการมีแฟล็ก collapseActionView
แอปจะแสดงมุมมองการดำเนินการเป็นไอคอนจนกว่าผู้ใช้จะโต้ตอบกับมุมมองการดำเนินการ เมื่อผู้ใช้
แตะไอคอน เครื่องจัดการในตัวสำหรับ
onOptionsItemSelected()
จะขยายมุมมองการทำงาน หากคลาสย่อยของกิจกรรมลบล้าง
onOptionsItemSelected()
วิธีลบล้างต้องเรียกใช้
super.onOptionsItemSelected()
เพื่อให้ Superclass ขยายมุมมองการดำเนินการได้
ถ้าต้องการทำบางอย่างเมื่อการดำเนินการขยายหรือยุบ คุณสามารถกำหนดคลาสที่
implements
MenuItem.OnActionExpandListener
,
และส่งต่อสมาชิกในชั้นเรียนให้
setOnActionExpandListener()
ตัวอย่างเช่น คุณอาจต้องการอัปเดตกิจกรรมโดยพิจารณาว่ามีการขยายมุมมองการทำงานหรือ
ยุบแล้ว ข้อมูลโค้ดต่อไปนี้แสดงวิธีกำหนดและส่ง Listener:
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.options, menu)
// Define the listener.
val expandListener = object : MenuItem.OnActionExpandListener {
override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
// Do something when the action item collapses.
return true // Return true to collapse the action view.
}
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
// Do something when it expands.
return true // Return true to expand the action view.
}
}
// Get the MenuItem for the action item.
val actionMenuItem = menu?.findItem(R.id.myActionItem)
// Assign the listener to that action item.
actionMenuItem?.setOnActionExpandListener(expandListener)
// For anything else you have to do when creating the options menu,
// do the following:
return true
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.options, menu);
// Define the listener.
OnActionExpandListener expandListener = new OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Do something when the action item collapses.
return true; // Return true to collapse action view.
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Do something when it expands.
return true; // Return true to expand the action view.
}
};
// Get the MenuItem for the action item.
MenuItem actionMenuItem = menu.findItem(R.id.myActionItem);
// Assign the listener to that action item.
MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener);
// For anything else you have to do when creating the options menu,
// do the following:
return true;
}
เพิ่มผู้ให้บริการการดำเนินการ
หากต้องการประกาศผู้ให้บริการการดำเนินการ ให้สร้างองค์ประกอบ <item>
ในเมนูของแถบเครื่องมือ
ทรัพยากร ตามที่อธิบายไว้ในเพิ่มและจัดการการดำเนินการ เพิ่ม
actionProviderClass
และตั้งค่าเป็นชื่อคลาสที่มีคุณสมบัติครบถ้วนสำหรับแอตทริบิวต์
Action Provider class
เช่น โค้ดต่อไปนี้ประกาศ ShareActionProvider
ซึ่งเป็นวิดเจ็ต
ที่กำหนดไว้ในไลบรารี AndroidX ที่ให้แอปของคุณแชร์ข้อมูลกับแอปอื่นๆ
<item android:id="@+id/action_share"
android:title="@string/share"
app:showAsAction="ifRoom"
app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>
ในกรณีนี้ ไม่จำเป็นต้องประกาศไอคอนสำหรับวิดเจ็ตเนื่องจาก
ShareActionProvider
มีกราฟิกของตัวเอง หากคุณกำลังใช้การทำงานที่กำหนดเอง
ประกาศไอคอน
แหล่งข้อมูลเพิ่มเติม
- โปรดดู
ShareActionProvider
สำหรับตัวอย่างการเพิ่มการดำเนินการแชร์ไปยังแถบแอปด้านบน - โปรดดู
ActionProvider
สำหรับ ข้อมูลเพิ่มเติมเกี่ยวกับการสร้างผู้ให้บริการการดำเนินการที่กำหนดเอง