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

روش نوشتن را امتحان کنید
Jetpack Compose ابزار رابط کاربری پیشنهادی برای اندروید است. یاد بگیرید که چگونه کامپوننت‌ها را در Compose اضافه کنید.

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

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

تصویری که برنامه Now in Android را با نماد نوار اقدام نشان می‌دهد
شکل ۱. یک آیکون عملیاتی در برنامه «Now in Android».

دکمه‌های عملیاتی اضافه کنید

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

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

کاتلین

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

    }
}