เพิ่มและจัดการการดำเนินการ

ลองใช้วิธีเขียน
Jetpack Compose เป็นชุดเครื่องมือ UI ที่แนะนําสําหรับ Android ดูวิธีเพิ่มคอมโพเนนต์ใน Compose

แถบแอปช่วยให้คุณเพิ่มปุ่มสําหรับการดําเนินการของผู้ใช้ได้ ฟีเจอร์นี้ช่วยให้คุณใส่การดําเนินการที่สําคัญที่สุดสําหรับบริบทปัจจุบันที่ด้านบนของแอปได้ เช่น แอปเรียกดูรูปภาพอาจแสดงปุ่มแชร์และสร้างอัลบั้มที่ด้านบนเมื่อผู้ใช้กําลังดูรูปภาพ เมื่อผู้ใช้ดูรูปภาพแต่ละรูป แอปอาจแสดงปุ่มครอบตัดและฟิลเตอร์

พื้นที่ในแถบแอปมีจำกัด หากแอปประกาศการดําเนินการมากกว่าที่แถบแอปจะแสดงได้ แถบแอปจะส่งการดําเนินการส่วนเกินไปยังเมนูรายการเพิ่มเติม นอกจากนี้ แอปยังระบุได้ว่าการดำเนินการจะแสดงในเมนูรายการเพิ่มเติมเสมอแทนที่จะแสดงในแถบแอป

รูปภาพที่แสดงแอป "พร้อมใช้งานใน Android" พร้อมไอคอนแถบการดำเนินการ
รูปที่ 1 ไอคอนการดำเนินการในแอป "พร้อมใช้งานใน Android แล้ว"

เพิ่มปุ่มดำเนินการ

ปุ่มดำเนินการและรายการอื่นๆ ทั้งหมดที่มีอยู่ในเมนูรายการเพิ่มเติมจะกำหนดไว้ใน ทรัพยากรเมนู XML หากต้องการเพิ่มการดำเนินการลงในแถบการดำเนินการ ให้สร้างไฟล์ XML ใหม่ในไดเรกทอรี res/menu/ ของโปรเจ็กต์

เพิ่มองค์ประกอบ <item> ให้กับแต่ละรายการที่ต้องการรวมไว้ในแถบการดำเนินการ ดังที่แสดงในไฟล์ XML ตัวอย่างเมนูต่อไปนี้

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto">

    <!-- "Mark Favorite", must appear as action button if possible. -->
    <item
        android:id="@+id/action_favorite"
        android:icon="@drawable/ic_favorite_black_48dp"
        android:title="@string/action_favorite"
        app:showAsAction="ifRoom"/>

    <!-- Settings, must always be in the overflow. -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          app:showAsAction="never"/>

</menu>

แอตทริบิวต์ app:showAsAction ระบุว่าจะแสดงการดำเนินการเป็นปุ่มบนแถบแอปหรือไม่ หากคุณตั้งค่า app:showAsAction="ifRoom" ไว้ การดำเนินการจะแสดงเป็นปุ่มหากมีที่ว่างเพียงพอในแถบแอป หากมีแถวไม่เพียงพอ ระบบจะส่งการดำเนินการส่วนเกินไปยังเมนูรายการเพิ่มเติม หากคุณตั้งค่า app:showAsAction="never" เช่นเดียวกับการดำเนินการการตั้งค่าของโค้ดตัวอย่าง การดำเนินการจะแสดงในเมนูรายการเพิ่มเติมเสมอและไม่แสดงในแถบแอป

ระบบจะใช้ไอคอนของการดำเนินการเป็นปุ่มการดำเนินการหากการดำเนินการแสดงในแถบแอป คุณจะเห็นไอคอนที่มีประโยชน์มากมายใน Material Icons

ตอบสนองต่อการดำเนินการ

เมื่อผู้ใช้เลือกรายการใดรายการหนึ่งในแถบแอป ระบบจะเรียกใช้onOptionsItemSelected()วิธีเรียกกลับของกิจกรรม และส่งออบเจ็กต์ MenuItem เพื่อระบุรายการที่ผู้ใช้แตะ ในการใช้งาน onOptionsItemSelected() ให้เรียกใช้เมธอด MenuItem.getItemId() เพื่อระบุรายการที่ผู้ใช้แตะ รหัสที่แสดงผลจะตรงกับค่าที่คุณประกาศในแอตทริบิวต์<item>ขององค์ประกอบandroid:idที่เกี่ยวข้อง

ตัวอย่างเช่น ข้อมูลโค้ดต่อไปนี้จะตรวจสอบการดำเนินการที่ผู้ใช้เลือก หากเมธอดไม่รู้จักการดำเนินการของผู้ใช้ ก็จะเรียกใช้เมธอดของซุปเปอร์คลาส ดังนี้

Kotlin

override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
    R.id.action_settings -> {
        // User chooses the "Settings" item. Show the app settings UI.
        true
    }

    R.id.action_favorite -> {
        // User chooses the "Favorite" action. Mark the current item as a
        // favorite.
        true
    }

    else -> {
        // The user's action isn't recognized.
        // Invoke the superclass to handle it.
        super.onOptionsItemSelected(item)
    }
}

Java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            // User chooses the "Settings" item. Show the app settings UI.
            return true;

        case R.id.action_favorite:
            // User chooses the "Favorite" action. Mark the current item as a
            // favorite.
            return true;

        default:
            // The user's action isn't recognized.
            // Invoke the superclass to handle it.
            return super.onOptionsItemSelected(item);

    }
}