ใช้มุมมองการดำเนินการและผู้ให้บริการการดำเนินการ

ในไลบรารีของ 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 หากไม่มีที่ว่างในแถบแอป แอปจะเพิ่มการดำเนินการลงใน เมนูรายการเพิ่มเติม

วันที่ รูปภาพแสดงแถบค้นหาที่มีไอคอนนำหน้าและต่อท้าย
รูปที่ 1 แถบค้นหาที่มีไอคอนนำหน้าและต่อท้าย

เมื่อผู้ใช้แตะไอคอนหรือรายการเมนู วิดเจ็ตจะขยายเพื่อเติมแถบเครื่องมือ เพื่อให้ โต้ตอบกับผู้ใช้

วันที่ รูปภาพแสดงมุมมองการค้นหาที่เปิดอยู่เมื่อโฟกัสแถบค้นหา
รูปที่ 2 มุมมองการค้นหาจะเปิดขึ้นเมื่อโฟกัสแถบค้นหาอยู่

ถ้าต้องการกำหนดค่าการดำเนินการ ให้ดำเนินการใน onCreateOptionsMenu() Callback คุณสามารถดูการอ้างอิงออบเจ็กต์ของมุมมองการทำงานได้โดยเรียกใช้เมธอด getActionView() ตัวอย่างเช่น โค้ดต่อไปนี้ได้รับการอ้างอิงออบเจ็กต์สำหรับ SearchView วิดเจ็ตที่กำหนดในตัวอย่างโค้ดก่อนหน้านี้

KotlinJava
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:

KotlinJava
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 สำหรับ ข้อมูลเพิ่มเติมเกี่ยวกับการสร้างผู้ให้บริการการดำเนินการที่กำหนดเอง