ספריית 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. אם אין מקום בסרגל האפליקציות, האפליקציה מוסיפה את הפעולה לתפריט הגלישה.
כשמשתמש מקיש על הסמל או על פריט התפריט, הווידג'ט מתרחב כדי למלא את סרגל הכלים, וכך המשתמש יכול ליצור איתו אינטראקציה.
אם צריך להגדיר את הפעולה, עושים זאת בonCreateOptionsMenu()callback של הפעילות. כדי לקבל את הפניה לאובייקט של תצוגת הפעולה, מפעילים את השיטה 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() כדי שמחלקת העל תוכל להרחיב את תצוגת הפעולה.
אם רוצים לבצע פעולה כלשהי כשהפעולה מורחבת או מכווצת, אפשר להגדיר מחלקה שמיישמת את MenuItem.OnActionExpandListener ולהעביר חבר במחלקה הזו אל setOnActionExpandListener().
לדוגמה, יכול להיות שתרצו לעדכן את הפעילות בהתאם למצב של תצוגת הפעולה – מורחבת או מכווצת. בקטע הקוד הבא מוצג איך להגדיר ולהעביר listener:
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.