PROGRAM POP UP
POP UP
Menu Pop Up adalah komponen antarmuka pengguna yang lazim dalam banyak tipe aplikasi. Untuk menyediakan pengalaman pengguna yang sudah umum dan konsisten, Anda harus menggunakan API Menu untuk menyajikan tindakan dan opsi lain kepada pengguna dalam aktivitas.
Mulai dengan Android 3.0 (API level 11), perangkat Android tidak perlu lagi menyediakan tombol Menu tersendiri. Dengan perubahan ini, aplikasi Android harus bermigrasi dari dependensi pada panel menu 6 item biasa, dan sebagai gantinya menyediakan panel aplikasi untuk menyajikan berbagai tindakan pengguna yang lazim.
Walaupun desain dan pengalaman pengguna untuk sebagian item menu telah berubah, semantik untuk mendefinisikan serangkaian tindakan dan opsi masih berdasarkan pada API Menu. Panduan ini menampilkan cara membuat tiga tipe dasar penyajian menu atau aksi pada semua versi Android:
- Menu opsi dan panel aplikasi
- Menu opsi adalah kumpulan utama item menu untuk suatu aktivitas. Di sinilah Anda harus menempatkan tindakan yang memiliki dampak global pada aplikasi, seperti "Penelusuran", "Tulis email", dan "Setelan".
Lihat bagian tentang Membuat Menu Opsi.
- Menu konteks dan mode tindakan kontekstual
- Menu konteks adalah menu mengambang yang muncul saat pengguna mengklik lama pada suatu elemen. Menu ini menyediakan tindakan yang memengaruhi konten atau bingkai konteks yang dipilih.
Mode tindakan kontekstual menampilkan item tindakan yang memengaruhi konten yang dipilih dalam panel di bagian atas layar dan memungkinkan pengguna memilih beberapa item sekaligus.
Lihat bagian tentang Membuat Menu Kontekstual.
- Menu pop-up
- Menu pop-up menampilkan daftar item secara vertikal yang berpangkal pada tampilan yang memanggil menu. Ini cocok untuk menyediakan tindakan tambahan yang terkait dengan konten tertentu atau untuk menyediakan opsi bagi bagian kedua dari suatu perintah. Tindakan di menu pop-up tidak boleh langsung memengaruhi konten yang bersangkutan, karena itu adalah fungsi tindakan kontekstual. Sebaliknya, menu pop-up adalah untuk tindakan tambahan yang terkait dengan ranah konten dalam aktivitas Anda.
Lihat bagian tentang Membuat Menu Pop-up.
Mendefinisikan Menu dalam XML
Untuk semua tipe menu, Android menyediakan format XML standar untuk mendefinisikan item menu. Sebagai ganti membuat menu di kode aktivitas, Anda harus mendefinisikan menu dan semua item menunya dalam resource menu XML. Anda kemudian dapat meng-inflate resource menu (memuatnya sebagai objek Menu) dalam aktivitas atau fragmen.
Menggunakan resource menu adalah praktik yang baik karena beberapa alasan:
- Memvisualisasikan struktur menu dalam XML menjadi lebih mudah.
- Cara ini memisahkan konten untuk menu dari kode perilaku aplikasi Anda.
- Cara ini memungkinkan Anda membuat konfigurasi menu alternatif untuk berbagai versi platform, ukuran layar, dan konfigurasi lainnya dengan memanfaatkan framework resource aplikasi.
Untuk mendefinisikan menu, buatlah sebuah file XML dalam direktori res/menu/ project dan buat menu dengan elemen-elemen berikut:
<menu>- Mendefinisikan
Menu, yang merupakan sebuah container item menu. Elemen<menu>harus menjadi node root untuk file dan dapat menampung satu atau beberapa elemen<item>dan<group>. <item>- Membuat
MenuItemyang mewakili satu item menu. Elemen ini dapat berisi elemen<menu>bersarang untuk membuat submenu. <group>- Container opsional yang tak terlihat untuk elemen-elemen
<item>. Container ini memungkinkan Anda mengelompokkan item menu agar bisa berbagi properti seperti status aktif dan visibilitas. Untuk informasi selengkapnya, lihat bagian tentang Membuat Grup Menu.
Berikut ini adalah contoh menu bernama game_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/new_game"
android:icon="@drawable/ic_new_game"
android:title="@string/new_game"
android:showAsAction="ifRoom"/>
<item android:id="@+id/help"
android:icon="@drawable/ic_help"
android:title="@string/help" />
</menu>
Elemen <item> mendukung beberapa atribut yang dapat Anda gunakan untuk mendefinisikan penampilan dan perilaku item. Item menu di atas mencakup atribut berikut:
android:id- ID resource unik bagi item, yang memungkinkan aplikasi mengenali item saat pengguna memilihnya.
android:icon- Acuan ke drawable untuk digunakan sebagai ikon item.
android:title- Acuan ke string untuk digunakan sebagai judul item.
android:showAsAction- Menetapkan waktu dan cara item ini muncul sebagai item tindakan di panel aplikasi.
Ini adalah atribut-atribut terpenting yang harus Anda gunakan, tetapi banyak lagi yang tersedia. Untuk informasi tentang semua atribut yang didukung, lihat dokumen Resource Menu.
Anda dapat menambahkan submenu ke sebuah item di menu apa saja dengan menambahkan elemen <menu> sebagai turunan <item>. Submenu berguna saat aplikasi Anda memiliki banyak fungsi yang dapat ditata ke dalam topik-topik, seperti item dalam sebuah panel menu aplikasi PC (File, Edit, Tampilan, dsb.). Contoh:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/file"
android:title="@string/file" >
<!-- "file" submenu -->
<menu>
<item android:id="@+id/create_new"
android:title="@string/create_new" />
<item android:id="@+id/open"
android:title="@string/open" />
</menu>
</item>
</menu>
Untuk menggunakan menu dalam aktivitas, Anda harus meng-inflate resource menu (mengonversi resource XML menjadi objek yang dapat diprogram) menggunakan MenuInflater.inflate(). Di bagian berikut, Anda akan melihat cara meng-inflate menu untuk tiap tipe menu.
Membuat Menu Opsi

Gambar 1. Menu opsi di Browser.
Menu opsi adalah tempat Anda harus menyertakan tindakan dan opsi lain yang relevan dengan konteks aktivitas saat ini, seperti "Telusuri", "Tulis email", dan "Setelan".
Tempat item dalam menu opsi muncul di layar bergantung pada versi aplikasi yang Anda kembangkan:
- Jika Anda telah mengembangkan aplikasi untuk Android 2.3.x (API level 10) atau yang lebih lama, konten menu opsi muncul di bagian atas layar saat pengguna menekan tombol Menu, seperti yang ditunjukkan pada gambar 1. Bila dibuka, bagian yang terlihat pertama adalah menu ikon, yang menampung hingga enam item menu. Jika menu Anda menyertakan lebih dari enam item, Android akan meletakkan item keenam dan sisanya ke dalam menu tambahan, yang dapat dibuka pengguna dengan memilih Lainnya.
- Jika Anda mengembangkan aplikasi untuk Android 3.0 (API level 11) dan yang lebih baru, item menu opsi tersedia dalam panel aplikasi. Secara default, sistem meletakkan semua item sebagai tindakan tambahan, yang dapat ditampilkan pengguna melalui ikon tindakan tambahan di sisi kanan panel aplikasi (atau dengan menekan tombol Menu, jika tersedia). Untuk mengaktifkan akses cepat ke tindakan penting, Anda dapat mempromosikan beberapa item agar muncul pada panel aplikasi dengan menambahkan
android:showAsAction="ifRoom"ke elemen-elemen<item>yang bersangkutan (lihat gambar 2).Untuk informasi selengkapnya tentang perilaku item tindakan dan perilaku panel aplikasi lainnya, lihat kelas pelatihan Menambahkan Panel Aplikasi.

Gambar 2. Aplikasi Google Spreadsheet, menampilkan beberapa tombol, termasuk tombol tindakan tambahan.
Anda dapat mendeklarasikan item untuk menu opsi dari subclass Activity atau subclass Fragment. Jika aktivitas maupun fragmen Anda mendeklarasikan item menu opsi, keduanya akan dikombinasikan dalam UI. Item aktivitas akan muncul terlebih dahulu, diikuti oleh item setiap fragmen sesuai dengan urutan penambahan setiap fragmen ke aktivitas. Jika perlu, Anda dapat menyusun ulang item menu dengan atribut android:orderInCategory dalam setiap <item> yang perlu Anda pindahkan.
Untuk menetapkan menu opsi suatu aktivitas, ganti onCreateOptionsMenu() (fragmen-fragmen menyediakan callback onCreateOptionsMenu() sendiri). Dalam metode ini, Anda dapat meng-inflate resource menu (yang didefinisikan dalam XML) menjadi Menu yang disediakan dalam callback. Contoh:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.game_menu, menu);
return true;
}
Anda juga dapat menambahkan item menu menggunakan add() dan mengambil item dengan findItem() untuk merevisi propertinya dengan API MenuItem.
Jika Anda mengembangkan aplikasi untuk Android 2.3.x dan yang lebih lama, sistem akan memanggil onCreateOptionsMenu() untuk membuat menu opsi saat pengguna membuka menu untuk pertama kali. Jika Anda mengembangkan aplikasi untuk Android 3.0 dan yang lebih baru, sistem akan memanggil onCreateOptionsMenu() saat memulai aktivitas, untuk menampilkan item menu pada panel aplikasi.
Menangani peristiwa klik
Bila pengguna memilih item dari menu opsi (termasuk item tindakan dalam panel aplikasi), sistem akan memanggil metode onOptionsItemSelected() aktivitas Anda. Metode ini meneruskan MenuItem yang dipilih. Anda dapat mengidentifikasi item dengan memanggil getItemId(), yang mengembalikan ID unik untuk item menu itu (yang didefinisikan oleh atribut android:id dalam resource menu atau dengan integer yang diberikan ke metode add()). Anda dapat mencocokkan ID ini dengan item menu yang diketahui untuk melakukan tindakan yang sesuai. Contoh:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.new_game:
newGame();
return true;
case R.id.help:
showHelp();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Bila Anda berhasil menangani sebuah item menu, kembalikan true. Jika tidak menangani item menu, Anda harus memanggil implementasi superclass onOptionsItemSelected() (implementasi default mengembalikan false).
Jika aktivitas Anda menyertakan fragmen, sistem akan memanggil terlebih dahulu onOptionsItemSelected() untuk aktivitas tersebut, kemudian untuk setiap fragmen (sesuai dengan urutan penambahan fragmen) hingga satu fragmen mengembalikan true atau semua fragmen telah dipanggil.
Tips: Android 3.0 menambahkan kemampuan bagi Anda untuk menentukan perilaku yang merespons klik untuk item menu di XML, menggunakan atribut android:onClick. Nilai atribut harus berupa nama metode yang didefinisikan aktivitas dengan menggunakan menu. Metode harus bersifat publik dan menerima satu parameter MenuItem bila sistem memanggilnya, metode ini akan meneruskan item menu yang dipilih. Untuk informasi selengkapnya dan contoh, lihat dokumen Resource Menu.
Tips: Jika aplikasi Anda berisi beberapa aktivitas dan sebagian di antaranya menyediakan menu opsi yang sama, pertimbangkan untuk membuat aktivitas yang tidak menerapkan apa pun kecuali metode onCreateOptionsMenu() dan onOptionsItemSelected(). Kemudian perluas class ini untuk setiap aktivitas yang harus menggunakan menu opsi yang sama. Dengan cara ini Anda dapat mengelola satu set kode untuk menangani tindakan menu dan setiap class turunan mewarisi perilaku menu tersebut. Jika Anda ingin menambahkan item menu ke salah satu aktivitas turunan, ganti onCreateOptionsMenu() di aktivitas tersebut. Panggil super.onCreateOptionsMenu(menu) agar item menu asli dibuat, kemudian tambahkan item menu yang baru dengan menu.add(). Anda juga dapat mengganti perilaku superclass untuk setiap item menu.
Mengubah item menu saat runtime
Setelah memanggil onCreateOptionsMenu(), sistem akan mempertahankan instance Menu yang Anda tempatkan dan tidak akan memanggil onCreateOptionsMenu() lagi kecuali jika menu dinyatakan tidak valid karena suatu alasan. Namun, Anda harus menggunakan onCreateOptionsMenu() hanya untuk membuat status menu awal, bukan membuat perubahan selama siklus proses aktivitas.
Jika Anda ingin mengubah menu opsi berdasarkan peristiwa yang terjadi selama siklus proses aktivitas, Anda dapat melakukannya dalam metode onPrepareOptionsMenu(). Metode ini meneruskan objek Menu sebagaimana adanya saat ini sehingga Anda dapat mengubahnya, seperti menambah, membuang, atau menonaktifkan item. (Fragmen juga menyediakan callback onPrepareOptionsMenu().)
Pada Android 2.3.x dan yang lebih lama, sistem akan memanggil onPrepareOptionsMenu() setiap kali pengguna membuka menu opsi (menekan tombol Menu ).
Pada Android 3.0 dan yang lebih baru, menu opsi dianggap sebagai selalu terbuka saat item menu ditampilkan pada panel aplikasi. Bila ada peristiwa dan Anda ingin mengupdate menu, Anda harus memanggil invalidateOptionsMenu() untuk meminta sistem memanggil onPrepareOptionsMenu().
Catatan: Anda tidak boleh mengubah item dalam menu opsi berdasarkan View yang saat ini menjadi fokus. Saat dalam mode sentuh (bila pengguna tidak sedang menggunakan trackball atau d-pad), tampilan tidak dapat mengambil fokus, sehingga Anda tidak boleh menggunakan fokus sebagai dasar untuk mengubah item dalam menu opsi. Jika Anda ingin menyediakan item menu yang sesuai konteks pada View, gunakan Menu Konteks.