آشنایی با منوهای اندروید — راهنمای مقدماتی توسعه دهندگان

۶۲۳ بازدید
آخرین به‌روزرسانی: ۲۰ اردیبهشت ۱۴۰۲
زمان مطالعه: ۴ دقیقه
آشنایی با منوهای اندروید — راهنمای مقدماتی توسعه دهندگان

به طور کلی سه نوع منو در اندروید وجود دارد که شامل Popup ،Contextual و Options می‌شود. هر نوع از این منوها دارای کاربرد و کد خاصی هستند. در این مقاله به بررسی منوهای اندروید می‌پردازیم. با ما همراه باشید.

هر منو باید یک فایل XML مرتبط با خود داشته باشد که لی‌آوت آن را تعریف می‌کند. این موارد شامل تگ‌های مرتبط با گزینه‌های منو هستند:

  • <menu> - این تگ عنصر محتوی منو است که مشابه LinearLayout محسوب می‌شود.
  • <item> - این تگ یک آیتم را نشان می‌دهد و درون تگ منو قرار می‌گیرد. آگاه باشید که یک عنصر آیتم می‌تواند یک عنصر <menu> را در خود نگه دارید تا یک منوی زیرفرعی را نمایش دهد.
  • <group> - این تگ برای نمایش یک مشخصه یا قابلیت خاص در جند آیتم منو استفاده می‌شود.

در ادامه نمونه‌ای از یک لی‌آوت یک منوی ساده را می‌بینید:

1<?xml version="1.0" encoding="utf-8"?>
2<menu xmlns:android="http://schemas.android.com/apk/res/android"
3    xmlns:app="http://schemas.android.com/apk/res-auto"
4    xmlns:actionProviderClass="http://schemas.android.com/tools">
5    <item android:id="@+id/item1"
6        android:icon="@drawable/ic_baseline_check_circle_24px"
7        android:title="item1"
8        app:showAsAction="always"
9        />
10    <item android:id="@+id/item2"
11        android:icon="@drawable/ic_baseline_copyright_24px"
12        android:title="item2"
13        app:showAsAction="always"
14        />
15    <item android:id="@+id/item3"
16        android:icon="@drawable/ic_baseline_favorite_24px"
17        android:title="item3"
18        app:showAsAction="always">
19    </item>
20</menu>

همچنان که در قطعه کد فوق می‌بینید، هر آیتم منو دارای خصوصیات مختلفی است. برخی از این موارد را در اینجا توضیح می‌دهیم، اما اگر می‌خواهید فهرست کامل را ببینید، پیشنهاد می‌کنیم این صفحه (+) را مطالعه کنید.

  • id – این یک شناسه یکتا برای آیتم در منو است. می‌توانید از این شناسه استفاده کنید و ببینید کاربر روی کدام آیتم کلیک کرده است.
  • icon – اگر بخواهید یک آیکون مرتبط با آن آیتم منو نشان دهید استفاده می‌شود.
  • title – متنی است که در منو برای آیتم نشان داده می‌شود.
  • showAsAction – این خصوصیت باید تنها زمانی که از یک منو در یک اکتیویتی با «نوار اپلیکیشن» (Application Bar) ‌استفاده می‌کنید، مورد استفاده قرار گیرد. این خصوصیت زمان و شیوه نمایش یک آیتم را به صورت یک اکشن در نوار اپلیکیشن مشخص می‌سازد. این خصوصیت پنج مقدار به صورت always ،never ،ifRoom ،withText و collapseActionView دارد:
1android:showAsAction="always|never|ifRoom|withText|collapseActionView"

معنای هر کدام از این موارد را در بخش بعدی این مقاله بررسی خواهیم کرد. به علاوه باید یک متد منوی onCreate مرتبط به اکتیویتی خود اضافه کنیم.

1//Options Menu
2@Override
3public boolean onCreateOptionsMenu(Menu menu) {
4    MenuInflater inflater = getMenuInflater();
5    inflater.inflate(R.menu.options_menu, menu);
6    return super.onCreateOptionsMenu(menu);
7}
8
9//Context Menu
10@Override
11public void onCreateContextMenu(ContextMenu menu, View v,
12                                ContextMenu.ContextMenuInfo menuInfo) {
13  super.onCreateContextMenu(menu, v, menuInfo);
14  MenuInflater inflater = getMenuInflater();
15  inflater.inflate(R.menu.context, menu);
16}

منوی گزینه‌ها

این منو به طور معمول در بخش فوقانی اپلیکیشن و درون آن ظاهر می‌شود و باید اکشن‌هایی که روی کل اپلیکیشن تأثیر می‌گذارند را در آن بگذارید. این موارد می‌توانند شامل تنظیمات اپلیکیشن یا کادر جستجو باشند.

با استفاده از لی‌آوت منوی فوق، منوی گزینه‌های ما به صورت زیر خواهد بود:

منوهای اندروید

چنان که قبلاً وعده کرده بودیم، در این بخش مقادیری که می‌توان به خصوصیت showAsAction داد را مورد بررسی قرار می‌دهیم:

  • Always – موجب می‌شود که نوار اپلیکیشن همواره نمایش یابد.
  • Never – با تعیین این مقدار نوار اپلیکیشن هرگز نمایش نخواهد یافت و بنابراین از طریق منوی overflow در اختیار ما قرار می‌گیرد.
  • ifRoom – تنها در صورتی که فضای کافی در نوار اکشن وجود داشته باشد، نمایش می‌یابد. به خاطر داشته باشید که بر اساس مستندات در مورد تعداد آیکون‌هایی که می‌توان در نوار اکشن قرار داد، محدودیتی وجود دارد.
  • withText – موجب می‌شود که عنوان آیتم در نوار اکشن گنجانده شود.
  • collapseActionView – اگر این آیتم یک نمای اکشن مرتبط با خود داشته باشد، به صورت جمع‌شدنی خواهد بود (از API 14 به بعد کار می‌کند).

اگر در ادامه آیتم آخر را در منوی خود به showAsAction=”never”‎ عوض کنیم، نتیجه زیر حاصل می‌شود:

منوهای اندروید

منوی زمینه‌ای

این منو زمانی ظاهر می‌شود که کاربر یک کلیک طولانی روی یکی از عناصر UI انجام دهد. گزینه‌های موجود در این منو به عنصر UI که کاربر روی آن کلیک کرده بستگی دارند. یکی از کاربردهای رایج این نوع منو در نماهای لیستی یا شبکه‌ای است که می‌خواهد تعاملی با یک آیتم داشته باشد و کار خاصی را انجام دهد.

فرض کنید اپلیکیشنی با یک تصویر دارید و می‌خواهید در زمان کلیک کاربر روی تصویر چندین امکان در اختیار وی قرار دهید. یک «منوی زمینه» (Context Menu) به دو روش ظاهر می‌شود:

  1. یک منوی شناور
  2. یک نوار اکشن در بخش فوقانی اپلیکیشن

ما در این بخش صرفاً شیوه استفاده از گزینه نخست را توضیح می‌دهیم. با استفاده از XML زیر:

1<?xml version="1.0" encoding="utf-8"?>
2<menu xmlns:android="http://schemas.android.com/apk/res/android">
3    <item
4        android:id="@+id/share"
5        android:title="Share"/>
6    <item
7        android:id="@+id/Mail"
8        android:title="Mail"/>
9    <item
10        android:id="@+id/MoreInfo"
11        android:title="More Information"/>
12</menu>

و افزودن کد زیر به اکیتویتی اصلی:

1 @Override
2    protected void onCreate(Bundle savedInstanceState) {
3       super.onCreate(savedInstanceState);
4       setContentView(R.layout.activity_main);
5       TYPE_OF_LAYOUT layout = (TYPE_OF_LAYOUT)findViewById(R.id.main_layout);
6       registerForContextMenu(layout);
7  }

نتیجه زیر به دست می‌آید:

منوهای اندروید

منوی Popup

یک منوی Popup به نوعی منو گفته می‌شود که آیتم‌ها را در یک لیست عمودی نمایش می‌دهد. این لیست به یک نما الصاق یافته است که کاربر روی آن کلیک کرده است و این منو را فرامی‌خواند. باید به خاطر داشته باشید که وقتی یک منوی Popup را انتخاب می‌کنید، نمی‌خواهید کاربر روی محتوای قبلی که کاربر فشرده است تأثیری بگذارید. در این منو از همان لی‌آوت منوی قبلی استفاده می‌کنیم، اما باید کد زیر را به اکتیویتی خود اضافه کنیم:

1   
2void showPopupMenu(View view) {
3  PopupMenu popup = new PopupMenu(this, view);
4  MenuInflater inflater = popup.getMenuInflater();
5  inflater.inflate(R.menu.actions, popup.getMenu());
6  popup.show();
7}

بدین ترتیب همان نتیجه تصویر قبلی به دست می‌آید، اما لازم نیست که کاربر یک کلیک طولانی انجام دهد.

آیکون‌ها در منوی Popup

اکنون که با ساختار منوی Popup آشنا شدیم، ‌شاید بخواهیم آیکون‌هایی به این منو اضافه کنیم. در ادامه نمونه‌ای از روش انجام این کار را ارائه می‌کنیم، اما باید درک کنید که این قابلیت برای منوهای Popup رایج نیست و ممکن است موجب رفتار غیرمنتظره‌ای شود. این کار با استفاده از reflection برای فعال کردن فلگی به نام setForceShowIcon ممکن می‌شود.

1//popup is an instance of PopupMenu
2
3try {
4      Field[] fields = popup.getClass().getDeclaredFields();
5      for (Field field : fields) {
6          if ("mPopup".equals(field.getName())) {
7              field.setAccessible(true);
8              Object menuPopupHelper = field.get(popup);
9              Class<?> classPopupHelper = Class.forName(menuPopupHelper
10                      .getClass().getName());
11              Method setForceIcons = classPopupHelper.getMethod(
12                      "setForceShowIcon", boolean.class);
13              setForceIcons.invoke(menuPopupHelper, true);
14              break;
15          }
16      }
17  } catch (Throwable e) {
18      e.printStackTrace();
19  }

منوهای اندروید

سخن پایانی

در این راهنما صرفاً به بررسی مقدماتی منوهای اندروید پرداختیم. امیدواریم این مقدار برای الهام بخشیدن به شما و تشویقتان برای مطالعه بیشتر در این زمینه کافی بوده باشد.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۴ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
tomerpacific
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *