Menambahkan dan menangani tindakan

Mencoba cara Compose
Jetpack Compose adalah toolkit UI yang direkomendasikan untuk Android. Pelajari cara menambahkan komponen di Compose.

Panel aplikasi memungkinkan Anda menambahkan tombol untuk tindakan pengguna. Fitur ini memungkinkan Anda menempatkan tindakan yang paling penting untuk konteks saat ini di bagian atas aplikasi. Misalnya, aplikasi penjelajahan foto mungkin menampilkan tombol bagikan dan buat album di bagian atas saat pengguna melihat rol foto mereka. Saat pengguna melihat satu foto, aplikasi mungkin menampilkan tombol crop dan filter.

Ruang di panel aplikasi bersifat terbatas. Jika aplikasi mendeklarasikan lebih banyak tindakan dari yang dapat ditampung di panel aplikasi, panel aplikasi akan mengirim tindakan lebihan ke menu tambahan. Aplikasi juga dapat menentukan agar suatu tindakan selalu ditampilkan dalam menu tambahan, bukan di panel aplikasi.

Gambar yang menampilkan aplikasi Now in Android dengan ikon panel tindakan
Gambar 1. Ikon tindakan di aplikasi "Now in Android".

Menambahkan tombol tindakan

Semua tombol tindakan dan item lain yang tersedia dalam tindakan tambahan ditentukan dalam resource menu XML. Untuk menambahkan tindakan ke panel tindakan, buat file XML baru di direktori res/menu/ project Anda.

Tambahkan elemen <item> untuk setiap item yang ingin Anda sertakan dalam panel tindakan, seperti yang ditunjukkan dalam contoh file XML menu berikut:

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

Atribut app:showAsAction menentukan apakah tindakan ditampilkan sebagai tombol di panel aplikasi. Jika Anda menetapkan app:showAsAction="ifRoom"—seperti dalam tindakan favorit kode contoh—tindakan akan ditampilkan sebagai tombol jika ada ruang di panel aplikasi untuk tindakan tersebut. Jika tidak ada cukup ruang, tindakan lebihan akan dikirim ke menu tambahan. Jika Anda menetapkan app:showAsAction="never"—seperti dalam tindakan setelan kode contoh—tindakan tersebut akan selalu tercantum dalam menu tambahan dan tidak ditampilkan di panel aplikasi.

Sistem menggunakan ikon tindakan sebagai tombol tindakan jika tindakan ditampilkan di panel aplikasi. Anda dapat menemukan berbagai ikon yang berguna di Ikon Material.

Merespons tindakan

Saat pengguna memilih salah satu item panel aplikasi, sistem akan memanggil metode callback onOptionsItemSelected() aktivitas Anda dan meneruskan objek MenuItem untuk menunjukkan item mana yang diketuk. Dalam penerapan onOptionsItemSelected(), panggil metode MenuItem.getItemId() untuk menentukan item mana yang diketuk. ID yang ditampilkan cocok dengan nilai yang Anda deklarasikan dalam atribut android:id elemen <item> yang sesuai.

Misalnya, cuplikan kode berikut akan memeriksa tindakan yang dipilih pengguna. Jika metode ini tidak mengenali tindakan pengguna, metode superclass akan dipanggil:

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);

    }
}