اضافه کردن و رسیدگی به اقدامات

نوار برنامه به شما امکان می دهد دکمه هایی را برای اقدامات کاربر اضافه کنید. این ویژگی به شما امکان می دهد مهم ترین اقدامات را برای زمینه فعلی در بالای برنامه قرار دهید. به عنوان مثال، یک برنامه مرور عکس ممکن است زمانی که کاربر به رول عکس خود نگاه می کند، دکمه های اشتراک گذاری و ایجاد آلبوم را در بالا نشان دهد. هنگامی که کاربر به یک عکس جداگانه نگاه می کند، برنامه ممکن است دکمه های برش و فیلتر را نشان دهد.

فضا در نوار برنامه محدود است. اگر برنامه ای اقدامات بیشتری را از آنچه در نوار برنامه قرار می دهد اعلام کند، نوار برنامه اقدامات اضافی را به منوی سرریز می فرستد. این برنامه همچنین می‌تواند تعیین کند که یک عمل به جای نمایش در نوار برنامه، همیشه در منوی سرریز نشان داده شود.

تصویری که Now را در برنامه Android با نماد نوار اقدام نشان می دهد
شکل 1. یک نماد عمل در برنامه "اکنون در اندروید".

اضافه کردن دکمه های عمل

تمام دکمه های عمل و سایر موارد موجود در سرریز عمل در یک منبع منوی XML تعریف شده اند. برای افزودن اکشن‌ها به نوار اقدام، یک فایل XML جدید در دایرکتوری res/menu/ پروژه خود ایجاد کنید.

همانطور که در فایل XML منوی نمونه زیر نشان داده شده است، یک عنصر <item> برای هر آیتمی که می‌خواهید در نوار اقدام قرار دهید اضافه کنید:

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

ویژگی app:showAsAction مشخص می‌کند که آیا عملکرد به صورت دکمه در نوار برنامه نشان داده می‌شود یا خیر. اگر app:showAsAction="ifRoom" را تنظیم کنید - مانند عملکرد مورد علاقه کد مثال - اگر در نوار برنامه فضایی برای آن وجود داشته باشد، عملکرد به عنوان یک دکمه نمایش داده می شود. اگر فضای کافی وجود نداشته باشد، اقدامات اضافی به منوی سرریز ارسال می شود. اگر app:showAsAction="never" را تنظیم کنید - مانند عملکرد تنظیمات کد مثال - این عملکرد همیشه در منوی سرریز فهرست می شود و در نوار برنامه نمایش داده نمی شود.

اگر عملکرد در نوار برنامه نمایش داده شود، سیستم از نماد عمل به عنوان دکمه عمل استفاده می کند. شما می توانید بسیاری از نمادهای مفید را در Material Icons پیدا کنید.

به اعمال پاسخ دهید

هنگامی که کاربر یکی از موارد نوار برنامه را انتخاب می‌کند، سیستم روش پاسخ به تماس onOptionsItemSelected() فعالیت شما را فراخوانی می‌کند و یک شی MenuItem را ارسال می‌کند تا مشخص کند روی کدام مورد ضربه زده شده است. در اجرای onOptionsItemSelected() متد MenuItem.getItemId() را فراخوانی کنید تا مشخص کنید که کدام مورد روی آن ضربه زده شده است. شناسه برگشتی با مقداری که در ویژگی android:id عنصر <item> مربوطه اعلام می‌کنید مطابقت دارد.

به عنوان مثال، قطعه کد زیر بررسی می کند که کاربر کدام عملکرد را انتخاب می کند. اگر متد اقدام کاربر را تشخیص ندهد، متد superclass را فراخوانی می کند:

کاتلین

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

جاوا

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

    }
}