Pengenalan Menu Android

Terdapat tiga jenis menu di Android: Popup, Kontekstual dan Pilihan.

Masing-masing mempunyai kes penggunaan dan kod tertentu yang sesuai dengannya. Untuk mengetahui cara menggunakannya, baca terus.

Setiap menu mesti mempunyai fail XML yang berkaitan dengannya yang menentukan susun aturnya. Ini adalah tag yang dikaitkan dengan pilihan menu:

- Ini adalah elemen bekas untuk menu anda (serupa dengan LinearLayout)

- Ini menunjukkan item dan bersarang di dalam tag menu. Ketahuilah bahawa elemen item dapat menahan elemen untuk mewakili submenu

- Ini digunakan untuk menandakan sifat atau ciri tertentu kepada beberapa item menu (keadaan IE / keterlihatan)

Seperti yang ditunjukkan dalam coretan kod di atas, setiap item menu mempunyai pelbagai atribut yang berkaitan dengannya. Saya akan memperincikan perkara utama di sini, tetapi jika anda ingin melihat apa lagi yang boleh anda tambahkan, pergi ke sini.

  • id - Ini adalah pengecam unik untuk item dalam menu. Anda boleh menggunakan ini untuk melihat dengan tepat item mana yang diklik oleh pengguna
  • ikon - Sekiranya anda ingin menunjukkan ikon yang berkaitan dengan item menu tersebut
  • tajuk - Teks yang akan ditunjukkan dalam menu untuk item tersebut
  • showAsAction - Atribut ini hanya boleh digunakan ketika menggunakan menu dalam aktiviti yang menggunakan bar aplikasi (atau seperti yang disebut juga, bar tindakan). Ia mengawal kapan dan bagaimana item ini akan muncul sebagai tindakan di bar aplikasi. Terdapat lima nilai: selalu, tidak pernah, ifRoom, withText, dan collapseActionView
android:showAsAction="always|never|ifRoom|withText|collapseActionView" 

Saya akan menghuraikan maksud setiap nilai ini di bahagian seterusnya.

Di samping itu, anda perlu menambahkan kaedah menu onCreate yang berkaitan dengan aktiviti anda.

//Options Menu @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); return super.onCreateOptionsMenu(menu); } //Context Menu @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context, menu); }

Menu Pilihan

Menu ini biasanya terdapat di bahagian atas aplikasi anda dan di dalamnya, anda harus meletakkan tindakan yang mempengaruhi aplikasi secara keseluruhan. Ini mungkin pengaturan aplikasi atau kotak pencarian.

Menggunakan susun atur menu dari atas, kami mendapat menu pilihan berikut:

Seperti yang dijanjikan, mari kita perhatikan nilai yang dapat diberikan untuk atribut showAsAction:

  • selalu - akan sentiasa dipaparkan di bar tindakan
  • tidak pernah - tidak akan pernah dipaparkan, dan oleh itu akan tersedia melalui menu limpahan
  • ifRoom - hanya jika terdapat ruang yang cukup di bar tindakan, maka ia akan ditunjukkan. Perlu diingat bahawa berdasarkan dokumentasi, terdapat had berapa banyak ikon yang dapat anda miliki di bar tindakan.
  • withText-akan memasukkan tajuk item di bar tindakan
  • collapseActionView - jika item ini mempunyai paparan tindakan yang berkaitan dengannya, item tersebut akan dilipat (dari API 14 ke atas)

Sekiranya kita terus maju dan menukar item terakhir dalam menu kita ke showAsAction = "never" , kita mendapat yang berikut:

Imej untuk siaran

Menu Kontekstual

Menu ini muncul apabila pengguna melakukan klik lama pada salah satu elemen UI anda. Pilihan yang terdapat dalam menu ini mempengaruhi elemen UI yang dibuat oleh pengguna. Adalah biasa untuk menggunakan menu jenis ini dalam paparan senarai atau grid, di mana interaksi pengguna dengan setiap item dapat menyebabkan tindakan tertentu.

Bayangkan senario di mana anda mempunyai aplikasi dengan gambar, dan anda ingin menunjukkan kepada pengguna beberapa pilihan ketika mereka mengklik gambar tersebut.

Menu konteks boleh muncul dalam dua cara:

  1. Menu terapung
  2. Bar tindakan di bahagian atas aplikasi anda

Kami hanya akan menunjukkan cara menggunakan pilihan pertama, tetapi anda boleh membaca lebih lanjut mengenai pilihan kedua di sini.

Menggunakan XML berikut:

Dan menambahkan kod berikut ke aktiviti utama kami:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TYPE_OF_LAYOUT layout = (TYPE_OF_LAYOUT)findViewById(R.id.main_layout); registerForContextMenu(layout); }

Kami akan mendapat yang berikut:

Menu Pop timbul

Menu pop timbul adalah jenis menu yang memaparkan item dalam senarai menegak. Senarai ini dilampirkan pada pandangan yang telah diklik oleh pengguna untuk menggunakan menu ini. Penting untuk diingat, bahawa ketika memilih menu pop timbul, anda tidak mahu pilihan pengguna mempengaruhi kandungan sebelumnya yang ditekan oleh pengguna.

Kami akan menggunakan susun atur menu XML yang sama seperti sebelumnya, tetapi kami perlu menambahkan kod berikut untuk aktiviti kami:

void showPopupMenu(View view) { PopupMenu popup = new PopupMenu(this, view); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.actions, popup.getMenu()); popup.show(); }

Kami akan mendapat hasil yang sama seperti tangkapan skrin sebelumnya, tetapi tanpa perlu pengguna melakukan klik lama.

Ikon Dalam Menu Popup

Sekarang saya tahu untuk apa anda berada di sini: anda ingin tahu bagaimana anda boleh menambah ikon pada menu .

Walaupun saya akan menunjukkan contoh bagaimana melakukan ini, adalah bijaksana untuk memahami bahawa ini adalah ciri yang tidak diaktifkan untuk menu pop timbul dan boleh menyebabkan tingkah laku yang tidak dijangka. Anda boleh mencapainya dengan menggunakan refleksi untuk menghidupkan bendera yang disebut setForceShowIcon .

//popup is an instance of PopupMenu try { Field[] fields = popup.getClass().getDeclaredFields(); for (Field field : fields) { if ("mPopup".equals(field.getName())) { field.setAccessible(true); Object menuPopupHelper = field.get(popup); Class classPopupHelper = Class.forName(menuPopupHelper .getClass().getName()); Method setForceIcons = classPopupHelper.getMethod( "setForceShowIcon", boolean.class); setForceIcons.invoke(menuPopupHelper, true); break; } } } catch (Throwable e) { e.printStackTrace(); }

Saya baru saja menggaru permukaan dengan menu Android, tapi mudah-mudahan, itu cukup untuk memberi inspirasi kepada anda untuk menggali lebih dalam.