Popup Menu Android Studio
Sebelumnya kita sudah membahas mengenai Options Menu, yang terletak pada ActionBar/Toolbar aktivitas sebuah aplikasi. Popup Menu dan Options Menu memiliki makna dan fungsi yang sama, sama-sama memunculkan items saat menu tersebut di klik. Bedanya mungkin, Popup Menu ini fleksibel; bisa ditempatkan dimana saja pada sebuah layout, namun tidak pada ActionBar. Pembahasan mengenai Options Menu dapat dilihat pada postingan ini.
Hal-hal mengenai Options Menu yang tidak dibahas pada artikel ini, berlaku hal yang sama pada Popup Menu. Artinya, akan lebih baik sebelum melakukan pengaplikasian terhadap Popup Menu, untuk menguasai terlebih dahulu Options Menu.
Kita akan menerapkannya pada sebuah Button (tombol); yang mana ketika Button tersebut di klik, akan memunculkan Popup Menu yang berisi item-item. Disini kita akan membuatnya sama dengan pembahasan pada options menu sebelumnya, yaitu 3 item; Share, Feedback dan Exit. Saat item share dipilih akan meluncurkan aksi share, saat Feedback dipilih akan memunculkan aksi umpan balik dan exit yang akan mengakhiri penggunaan aplikasi.
Penerapan Popup Menu
Pertama-tama buatlah sebuah tombol pada activity_main.xml, sesuaikan atribut-atribut mengenai letak, ukuran dan lainnya dengan keinginan dan tambahkan atribut:onClick="showPopupMenu". Pada atribut onClick showPopupMenu tersebut akan digaris bawahi warna merah. Arahkan mouse kepada showPopupMenu yang berwarna merah tersebut lalu klik ALT+Enter, kemudian pada pilihan yang ada pilih "Create "showPopupMenu(View)' in 'MainActivity'. Hal tersebut akan membuat metode baru untuk atribut onClick tersebut pada file java MainActivity.java. Berikut kode lengkap pada activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/text_popup"
android:textSize="17sp"
android:layout_marginTop="40dp"
android:layout_marginBottom="20dp"/>
<Button
android:id="@+id/buttonPop"
android:layout_below="@id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:onClick="showPopupMenu"
android:text="Show Popup Menu"/>
</RelativeLayout>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/text_popup"
android:textSize="17sp"
android:layout_marginTop="40dp"
android:layout_marginBottom="20dp"/>
<Button
android:id="@+id/buttonPop"
android:layout_below="@id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:onClick="showPopupMenu"
android:text="Show Popup Menu"/>
</RelativeLayout>
Selajutnya adalah membuat terlebih dahulu menunya. Pembahasan pada Options Menu di postingan sebelumnya telah mengupas tuntas cara pembuatan sebuah menu lengkap dengan panduan gambar. Disini kita akan membuatnya sama, bedanya hanya pada atribut icon. Pada Popup Menu ini tidak akan diberikan icon; karena memang jika diberi icon juga iconnya tidak muncul (atau mungkin saya yang belum tahu caranya), dan tidak diberikan atribut showAsAction karena kemunculannya bukan di ActionBar. Hanya atribut id dan title pada masing-masing item.
Klik kanan pada folder res > New > Android Resource File. Pada tab konfigurasi, beri nama first_menu, lalu pada Resource type pilih Menu kemudian klik OK. Akan muncul folder baru di dalam folder res, yaitu folder menu yang berisi file xml yaitu first_menu.xml. Buat 3 item yakni Share, Feedback dan Exit di dalam first_menu.xml tersebut. Berikut kode lengkapnya pada first_menu.xml :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/share"
android:title="Share"/>
<item
android:id="@+id/feedback"
android:title="Feedback"/>
<item
android:id="@+id/exit"
android:title="Exit"/>
</menu>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/share"
android:title="Share"/>
<item
android:id="@+id/feedback"
android:title="Feedback"/>
<item
android:id="@+id/exit"
android:title="Exit"/>
</menu>
Langkah selanjutnya adalah coding di MainActivity.java yaitu : Membuat sebuah metode baru yang akan meng inflate menu dan penanganan pada setiap item yang dipilih. Metode ini dibuat diluar metode onCreate. Disini, metode tersebut kita beri nama TunjukkanKeberadaanPopupMenu. Sebelumnya sudah terdapat sebuah metode pada Mainactivity.java yang dibuat tadi melalui activity_main.xml yaitu metode showPopupMenu yang secara otomatis berada di bagian paling dibawah. Kemudian kita akan memasukkan metode TunjukkanKeberadaanPopupMenu di dalam metode showPopupMenu tersebut untuk memunculkan menu saat tombol diklik. Berikut kode lengkap pada MainActivity.java :
package com.example.proyekpertama; import android.content.ActivityNotFoundException; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.view.MenuItem; import android.view.View; import android.widget.PopupMenu; import android.widget.Toast; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /* Meng inflate menu dan memberi penanganan pada setiap item yang dipilih */
public void TunjukkanKeberadaanPopupMenu(View view) { PopupMenu pop = new PopupMenu(this, view); pop.inflate(R.menu.first_menu); pop.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.share: /*menangani saat Share di klik*/
Intent share = new Intent(Intent.ACTION_SEND); share.setType("text/plain"); share.putExtra(Intent.EXTRA_SUBJECT, "Download Aplikasinya"); share.putExtra(Intent.EXTRA_TEXT, "Ayo segera download" + "aplikasi kami gratis-tis!!"); startActivity(Intent.createChooser(share, "Bagikan Aplikasi ini")); break; case R.id.feedback: /*menangani saat Feedback di klik*/
Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"gwnbstudio@gmail.com"}); intent.putExtra(Intent.EXTRA_CC, new String[] {"birwinecheese@gmail.com"}); intent.putExtra(Intent.EXTRA_SUBJECT, "Download App Kami"); intent.putExtra(Intent.EXTRA_TEXT, "Hadir! Aplikasi keren dan" + "Wow.. Segera download di Playstore!"); try { startActivity(Intent.createChooser(intent, "Kirim Feedback")); } catch (ActivityNotFoundException ex) { Toast.makeText(MainActivity.this, "Dibatalkan",Toast.LENGTH_SHORT).show(); } break; case R.id.exit: /*menangani saat Exit di klik*/
finishAffinity(); } return true; } }); pop.show(); } /* Metode onClick yang dibuat dari Activity_main tadi */
public void showPopupMenu(View view) { /* Memunculkan menu saat tombol di klik */
TunjukkanKeberadaanPopupMenu(view);
}
}