הטמעת סמלים מותאמים

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

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

דוגמאות ומקור

דוגמאות לקוד:

  • 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 vector drawables.

הנתיב הזה צריך להיות קמור ותואם לאזור הבטוח (66/71 = 91%) בתוך גבולות התצוגה. הדרישה הזו נאכפת באחת מבדיקות CTS.

אם תחליטו להשתמש במעגל כמסכה של הפלטפורמה, הקפידו להוסיף גם את השכבה העליונה: ‎config_useRoundIcon = true. אם לא, מגדירים את ערך התצורה הזה כ-false או לא מציינים את ערך התצורה הזה.

Adaptive Icon 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 מחזיר drawable, פשוט מחברים אותו ל-ImageView. כך כבר מתבצע עיבוד של סמלים בפלטפורמות מדור קודם.

בנוגע לעיבוד של אפקט תנועה דינמי, תהיה הטמעת עזר ב-Launcher3‏ (platform/packages/apps/Launcher3) שמראה איך להשיג את האפקט ב-O-MR1.

אימות

כדי לאמת את ההטמעה, אחרי שמחליפים את המסכה לפי הצורך, צריך לבדוק אם הסמלים מוצגים בצורה תקינה ב-Launcher3, ב'הגדרות', ב'סקירה כללית' וב'הגדרות'. אפשר גם להריץ את AdaptiveIconDrawableTest.java ואת AdaptiveIconMaskTest.java בתוך TestCase של CTS לגרפיקות כדי לבדוק את ההטמעה.

תרחיש בדיקה ידני מומלץ זמין בכתובת: platform/development/samples/AdaptiveIconSample/.

בעיות מוכרות

הבעיות הידועות כוללות את הבעיות הבאות:

  • סמלים מטושטשים, בהתאם לאופן שבו נתיב המסכה מוגדר.
  • סמלי קיצור מוגדלים אם מפתחי האפליקציות לא משתמשים בשיטה Icon.createWithAdaptiveBitmap() או לא משתמשים בה בצורה נכונה. כדי שהשיטה הזו תפעל כמו שצריך, צריך להוסיף 25% מרווח לכל ארבע הצדדים של קובץ ה-Bitmap.

אפשר לטפל בבעיות האלה באופן הבא:

  • צריך להגדיר את המסכה במערכת קואורדינטות [0, 100] x [0, 100].
  • חשוב לוודא שלתמונות שמשמשות לסמלים מותאמים (סמלי מרכז האפליקציות , קיצורי דרך) יש מספיק רווח (25%) בכל ארבעת הצדדים.