הוספה של פעולות וטיפול בהן

אפשר לנסות את הדרך של כתיבת הודעה
‫Jetpack Compose היא ערכת הכלים המומלצת לבניית ממשק משתמש ב-Android. איך מוסיפים רכיבים ב-Compose

סרגל האפליקציה מאפשר להוסיף כפתורים לפעולות של המשתמשים. התכונה הזו מאפשרת לכם להציב את הפעולות הכי חשובות בהקשר הנוכחי בחלק העליון של האפליקציה. לדוגמה, באפליקציה לעיון בתמונות, אם המשתמש מעיין בתמונות במגילה, יכול להיות שיוצגו בחלק העליון לחצנים של שיתוף ויצירת אלבום. כשהמשתמש מסתכל על תמונה ספציפית, יכול להיות שיוצגו באפליקציה הלחצנים חיתוך ופילטר.

יש מקום מוגבל בסרגל האפליקציות. אם אפליקציה מצהירה על יותר פעולות מכפי שאפשר להציג בסרגל האפליקציה, הפעולות העודפות מועברות לתפריט הצגה של עוד אפשרויות. האפליקציה יכולה גם לציין שפעולה מסוימת תמיד תוצג בתפריט האפשרויות הנוספות, במקום בסרגל האפליקציות.

תמונה שרואים בה את האפליקציה Now in Android עם סמל של סרגל פעולות
איור 1. סמל פעולה באפליקציה Now in Android.

הוספת כפתורי פעולה

כל כפתורי הפעולה והפריטים האחרים שזמינים בתפריט הפעולות הנוספות מוגדרים במשאב תפריט ב-XML. כדי להוסיף פעולות לסרגל הפעולות, יוצרים קובץ XML חדש בספרייה res/menu/ של הפרויקט.

מוסיפים רכיב <item> לכל פריט שרוצים לכלול בסרגל הפעולות, כמו שמוצג בקובץ ה-XML לדוגמה של התפריט הבא:

<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"—כמו בפעולה favorite בקוד לדוגמה—הפעולה מוצגת כלחצן אם יש מקום בשורת האפליקציות. אם אין מספיק מקום, הפעולות העודפות נשלחות לתפריט האפשרויות הנוספות. אם מגדירים app:showAsAction="never" – כמו בפעולה settings בקוד לדוגמה – הפעולה תמיד מופיעה בתפריט האפשרויות הנוספות ולא בסרגל האפליקציות.

המערכת משתמשת בסמל של הפעולה כלחצן הפעולה אם הפעולה מוצגת בסרגל האפליקציות. אפשר למצוא הרבה סמלים שימושיים ב-Material Icons.

תגובה לפעולות

כשמשתמש בוחר אחד מהפריטים בסרגל האפליקציות, המערכת קוראת לשיטת הקריאה החוזרת onOptionsItemSelected() של הפעילות ומעבירה אובייקט MenuItem כדי לציין איזה פריט נבחר. בהטמעה של onOptionsItemSelected(), מבצעים קריאה ל-method‏ MenuItem.getItemId() כדי לקבוע על איזה פריט הקישו. המזהה שמוחזר תואם לערך שהצהרתם במאפיין android:id של רכיב <item> המתאים.

לדוגמה, קטע הקוד הבא בודק איזו פעולה המשתמש בוחר. אם השיטה לא מזהה את פעולת המשתמש, היא מפעילה את שיטת מחלקת העל:

Kotlin

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

Java

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

    }
}