יישם אייקונים מסתגלים

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

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

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

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

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

נתיב זה צריך להיות קמור ועליו לכבד את האזור הבטוח (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. כך סמלים כבר מוצגים בפלטפורמות Pre-O.

לגבי עיבוד אפקט תנועה דינמי, ל-Launcher3 (פלטפורמה/חבילות/אפליקציות/Launcher3) יהיה מימוש ייחוס שמראה כיצד להשיג את האפקט ב-O-MR1.

מַתַן תוֹקֵף

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

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

בעיות ידועות

בעיות מוכרות כוללות את הדברים הבאים:

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

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

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