استخدام قوائم الإجراءات والإجراءات

تتضمّن مكتبة AndroidX يوفّر Toolbar الطرق المختلفة للمستخدمين للتفاعل مع تطبيقك. تصف إضافة الإجراءات ومعالجتها كيفية تعريف إجراء، والذي يمكن أن يكون زرًا أو عنصر قائمة. يصف هذا المستند كيفية إضافة مكونان متعدد الاستخدامات:

  • عرض الإجراء هو إجراء يوفر وظائف غنية داخل شريط التطبيقات. بالنسبة على سبيل المثال، تتيح طريقة عرض إجراء البحث للمستخدم كتابة نص البحث في شريط التطبيق بدون الحاجة إلى لتغيير الأنشطة أو الأجزاء.
  • موفّر الإجراء هو إجراء بتصميم مخصّص له. الإجراء في البداية يظهر كزر أو عنصر قائمة؛ عندما ينقر المستخدم على الإجراء، يتحكم موفر الإجراء سلوك الإجراء بأي طريقة تحددها. على سبيل المثال، قد يستجيب موفِّر الإجراء لطلب بالنقر عليها من خلال عرض قائمة.

ويوفر AndroidX العديد من الأدوات المتخصّصة لعرض الإجراءات وموفِّري الإجراءات. على سبيل المثال، التطبيق المصغّر "SearchView" ينفذ طريقة عرض إجراء لإدخال طلبات البحث. تشير رسالة الأشكال البيانية ShareActionProvider ينفذ تطبيق مصغّر مزوّد إجراءات لمشاركة المعلومات مع التطبيقات الأخرى. يمكنك أيضًا تحديد طرق عرض الإجراءات ومقدمي الإجراءات لديك.

إضافة طريقة عرض للإجراءات

لإضافة طريقة عرض إجراء، أنشئ <item> عنصر قائمة في مورد قائمة شريط الأدوات، كما هو موضح في إضافة الإجراءات ومعالجتها أضف إحدى السمات التالية إلى العنصر <item>:

  • actionViewClass: فئة التطبيق المصغّر الذي ينفّذ الإجراء
  • actionLayout: مورد تنسيق يصف مكوّنات الإجراء

اضبط السمة showAsAction على "ifRoom|collapseActionView" أو "never|collapseActionView" تشير العلامة collapseActionView إلى كيفية عرض الأداة في حال عدم تفاعل المستخدم معها إذا كانت الأداة على شريط التطبيق، فإن التطبيق لعرض الأداة كرمز. إذا كانت الأداة في القائمة الكاملة، سيعرض التطبيق التطبيق المصغّر. كعنصر قائمة. عندما يتفاعل المستخدم مع عرض الإجراء، يتم توسيعه لملء شريط التطبيق.

على سبيل المثال، يضيف الرمز التالي تطبيق SearchView المصغّر إلى شريط التطبيقات:

<item android:id="@+id/action_search"
     android:title="@string/action_search"
     android:icon="@drawable/ic_search"
     app:showAsAction="ifRoom|collapseActionView"
     app:actionViewClass="androidx.appcompat.widget.SearchView" />

إذا كان المستخدم لا يتفاعل مع التطبيق المصغّر، يعرض التطبيق الأداة كرمز محدّد من قناة "android:icon" إذا لم تكن هناك مساحة في شريط التطبيقات، سيضيف التطبيق الإجراء إلى القائمة الكاملة.

صورة تعرض شريط بحث مع رمزين بادئة ولاحقة.
الشكل 1. شريط البحث الذي يتضمن رموز بادئة ولاحقة

عندما ينقر المستخدم على الرمز أو عنصر القائمة، يتم توسيع الأداة لملء شريط الأدوات، ما يتيح تفاعل المستخدم معها.

صورة تعرض طريقة عرض البحث مفتوحة بعد التركيز على شريط البحث
الشكل 2. يتم فتح طريقة عرض البحث بعد التركيز على شريط البحث.

إذا كنت بحاجة إلى ضبط الإجراء، يمكنك إجراء ذلك في صفحة نشاطك onCreateOptionsMenu() معاودة الاتصال. ويمكنك الحصول على مرجع كائن عرض الإجراء عن طريق استدعاء getActionView() . على سبيل المثال، يحصل الرمز التالي على مرجع الكائن SearchView. التطبيق المصغّر المحدد في مثال الرمز السابق:

Kotlin

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.main_activity_actions, menu)

    val searchItem = menu?.findItem(R.id.action_search)
    val searchView = searchItem?.actionView as SearchView

    // Configure the search info and add any event listeners.

    return super.onCreateOptionsMenu(menu)
}

Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_activity_actions, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView =
            (SearchView) searchItem.getActionView();

    // Configure the search info and add any event listeners.

    return super.onCreateOptionsMenu(menu);
}

الاستجابة لتوسيع إطار عرض الإجراء

إذا كان عنصر <item> الخاص بالإجراء يحتوي على علامة collapseActionView، سيتم يعرض تطبيق عرض الإجراء كرمز إلى أن يتفاعل المستخدم مع طريقة عرض الإجراء. عندما يجرّب فوق الرمز، فإن المعالج المضمن onOptionsItemSelected() لتوسيع عرض الإجراء. إذا كانت الفئة الفرعية لنشاطك تلغي onOptionsItemSelected()، يجب استدعاء طريقة الإلغاء super.onOptionsItemSelected() حتى تتمكّن الفئة الفائقة من توسيع عرض الإجراء.

إذا كنت تريد تنفيذ إجراء عند توسيع الإجراء أو تصغيره، يمكنك تحديد فئة implements MenuItem.OnActionExpandListener, وتمرير أحد أعضاء هذا الفصل setOnActionExpandListener() على سبيل المثال، قد ترغب في تحديث النشاط استنادًا إلى ما إذا كانت طريقة عرض الإجراء موسّعة أو تمّ التصغير. يعرض مقتطف الرمز التالي كيفية تحديد مستمع واجتيازه:

Kotlin

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.options, menu)

    // Define the listener.
    val expandListener = object : MenuItem.OnActionExpandListener {
        override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
            // Do something when the action item collapses.
            return true // Return true to collapse the action view.
        }

        override fun onMenuItemActionExpand(item: MenuItem): Boolean {
            // Do something when it expands.
            return true // Return true to expand the action view.
        }
    }

    // Get the MenuItem for the action item.
    val actionMenuItem = menu?.findItem(R.id.myActionItem)

    // Assign the listener to that action item.
    actionMenuItem?.setOnActionExpandListener(expandListener)

    // For anything else you have to do when creating the options menu,
    // do the following:

    return true
}

Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options, menu);

    // Define the listener.
    OnActionExpandListener expandListener = new OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            // Do something when the action item collapses.
            return true;  // Return true to collapse action view.
        }

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            // Do something when it expands.
            return true;  // Return true to expand the action view.
        }
    };

    // Get the MenuItem for the action item.
    MenuItem actionMenuItem = menu.findItem(R.id.myActionItem);

    // Assign the listener to that action item.
    MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener);

    // For anything else you have to do when creating the options menu,
    // do the following:

    return true;
}

إضافة مزوّد إجراءات

للإعلان عن موفِّر إجراء، يجب إنشاء عنصر <item> في قائمة شريط الأدوات. المصدر، كما هو موضَّح في مقالة إضافة الإجراءات ومعالجتها. إضافة actionProviderClass وتعيينها على اسم الفئة المؤهلة بالكامل فئة مقدّمي الإجراءات.

على سبيل المثال، يعرِّف الرمز التالي السمة ShareActionProvider، وهي تطبيق مصغّر محدد في مكتبة AndroidX والذي يسمح لتطبيقك بمشاركة البيانات مع التطبيقات الأخرى:

<item android:id="@+id/action_share"
    android:title="@string/share"
    app:showAsAction="ifRoom"
    app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>

في هذه الحالة، من غير الضروري الإعلان عن رمز للأداة، حيث يوفّر تطبيق "ShareActionProvider" رسومات خاصة به. إذا كنت تستخدم إجراءً مخصّصًا أن تعلن عن رمز.

مصادر إضافية

  • عرض ShareActionProvider كمثال لإضافة إجراء المشاركة إلى شريط التطبيق العلوي.
  • عرض ActionProvider مقابل مزيد من المعلومات حول إنشاء مزوّد إجراءات مخصّصة