הסמלים המותאמים שומרים על צורה עקבית בתוך המכשיר, אבל משתנים ממכשיר למכשיר במכשיר עם נכס סמל אחד בלבד שסופק על ידי המפתח. בנוסף, סמלים תומכות בשתי שכבות (חזית ורקע) שיכולות לשמש לתנועה לספק למשתמשים חוויה חזותית מרהיבה.
מערכות הטמעה של מכשירים מספקים מסכת מכשיר שקובעת את הצורה של כל הסמלים במכשיר. הסמל הזה יוצג בכל פלטפורמות של ממשק המשתמש של המערכת שבהן נעשה שימוש בסמלי מרכז האפליקציות (למשל: מרכז האפליקציות, סקירה כללית, הגדרות וגיליון שיתוף).
דוגמאות ומקור
דוגמאות לקוד:
platform/development/samples/AdaptiveIconSample/
מסמכי תיעוד למפתחים:
קוד מקור:
platform/frameworks/base/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
הטמעה
כדי לשנות את הצורה של הסמל בפלטפורמה, צריך להוסיף שכבת-על אחת
framework/base/core/res/res/values/config.xml
, באופן הבא:
<!-- Specifies the path that is used by AdaptiveIconDrawable class to crop launcher icons. --> <string name="config_icon_mask" translatable="false">"M50,0L100,0 100,100 0,100 0,0z"</string>
הפורמט והתחביר של המחרוזת תואמים ל-W3, תקן SVG לנתיב להגדרה. הפורמט הזה ל-PathData הוא פריט גרפי וקטורי של Android תמיכה גם כן.
הנתיב הזה צריך להיות קמור ועליו להתאים לאזור הבטוח (66/71 = 91%) בתוך גבולות התצוגה. המדיניות הזו נאכפה באחת מבדיקות ה-CTS.
אם תחליטו להשתמש בעיגול בתור מסכת הפלטפורמה, הקפידו להוסיף גם שכבת-על config_useRoundIcon = true. אם לא, יש להגדיר את ערך ההגדרה הזה כ-False או לא ולציין את ערך התצורה הזה.
API של סמל מותאם
ה-API של המחלקה AdaptiveIconDrawable
מוצג למטה:
package android.graphics.drawable; public class AdaptiveIconDrawable extends Drawable implements Drawable.Callback { method public Drawable getBackground(); method public Drawable getForeground(); method public Path getIconMask(); method public Region getSafeZone(); method public float getExtraInsetFraction(); method public int getOpacity(); method public void invalidateDrawable(Drawable); method public void scheduleDrawable(Drawable, Runnable, long); method public void setAlpha(int); method public void setColorFilter(ColorFilter); method public void setOpacity(int); method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); }
public class Icon extends Parceleable { method public Bitmap createWithAdaptiveBitmap(); }
הטמעת קובצי עזר
אין צורך לעשות דבר כדי לעבד את הסמלים הסטטיים המותאמים פלטפורמות של ממשק המשתמש של המערכת. כש-PackageManager מחזיר פריט שניתן להזזה, פשוט צריך לקשר אותו אל ImageView. כך מתבצע רינדור של סמלים בפלטפורמות טרום-O.
לגבי עיבוד אפקט התנועה הדינמית, מרכז האפליקציות 3 (platform/packages/apps/Launcher3) יוצג הטמעת קובץ עזר איך להשיג את האפקט ב-O-MR1.
אימות
כדי לאמת את ההטמעה, אחרי שמבטלים את המסכה המתאימה, אפשר לעיין בקטע אם הסמלים מעובדים בצורה תקינה במרכז האפליקציות, בהגדרות, בסקירה הכללית ובהגדרות. אפשר גם להריץ את AdaptiveIconDrawableTest.java ואת AdaptiveIconMaskTest.java בתוך הגרפיקה של CTS TestCase כדי לבדוק את היישום.
ניתן למצוא מקרה בדיקה ידני מומלץ בכתובת: פלטפורמה/פיתוח/דוגמאות/AdaptiveIconSample/.
בעיות מוכרות
הבעיות המוכרות כוללות:
- סמלים מטושטשים, בהתאם לאופן שבו מוגדר נתיב המסכה.
- סמלי קיצור דרך מוגדלים אם מפתחי אפליקציות לא משתמשים
Icon.createWithAdaptiveBitmap()
, או אין להשתמש בשיטה הזו כראוי. כדי שהשיטה הזו תפעל כמו שצריך, הערכים שמועברים ב-Bitmap צריכים להיות 25% מכל ארבעת הצדדים.
אפשר לטפל בבעיות האלה באופן הבא:
- יש להגדיר את המסכה במערכת הקואורדינטות [0, 100] x [0, 100].
- ודא שתמונות המשמשות לסמלים מותאמים (סמלי מרכז האפליקציות , קיצורי דרך) לכלול מרווח פנימי מספיק (25%) בכל ארבעת הצדדים.