שימוש בתצוגות של פעולות ובספקי פעולות

של ספריית 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, האפליקציה מציגה את תצוגת הפעולה כסמל עד שהמשתמש מקיים אינטראקציה עם תצוגת הפעולה. כשהמשתמש שמקישים על הסמל, ה-handler המובנה של 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 עבור מידע נוסף על יצירת ספק של פעולות מותאמות אישית.