پیاده سازی آیکون های تطبیقی

نمادهای تطبیقی ​​شکلی ثابت در داخل دستگاه دارند اما از دستگاهی به دستگاه دیگر با تنها یک دارایی نماد ارائه شده توسط توسعه دهنده متفاوت است. علاوه بر این، آیکون ها از دو لایه (پیش زمینه و پس زمینه) پشتیبانی می کنند که می توانند برای حرکت استفاده شوند تا لذت بصری را برای کاربران فراهم کنند.

پیاده‌کننده‌های دستگاه یک ماسک دستگاه ارائه می‌کنند که شکل تمام نمادهای یک دستگاه را تعیین می‌کند. این نماد در هر سطح رابط کاربری سیستمی که از نمادهای راه‌انداز استفاده می‌کند (مانند راه‌انداز، نمای کلی، تنظیمات و برگه اشتراک‌گذاری) استفاده می‌شود.

مثال ها و منبع

نمونه کد:

  • 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 همان چیزی است که نقشه‌های برداری بردار اندروید نیز پشتیبانی می‌کنند.

این مسیر باید محدب باشد و باید محدوده امن (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 متصل کنید. اینگونه است که آیکون ها قبلاً در پلتفرم های Pre-O ارائه می شوند.

با توجه به رندر کردن افکت حرکت پویا، Launcher3 (پلتفرم/بسته‌ها/برنامه‌ها/Launcher3) یک پیاده‌سازی مرجع خواهد داشت که نحوه دستیابی به افکت در O-MR1 را نشان می‌دهد.

اعتبار سنجی

برای اعتبار بخشیدن به پیاده سازی، پس از حذف ماسک مورد علاقه خود، ببینید آیا نمادها در Launcher3، Settings، Overview و Settings به درستی رندر شده اند یا خیر. همچنین می‌توانید AdaptiveIconDrawableTest.java و AdaptiveIconMaskTest.java را در CTS TestCase گرافیکی برای آزمایش پیاده‌سازی اجرا کنید.

یک مورد آزمایشی دستی توصیه شده را می‌توانید در: platform/development/samples/AdaptiveIconSample/ پیدا کنید.

مشکلات شناخته شده

مسائل شناخته شده شامل موارد زیر است:

  • آیکون های تار، بسته به نحوه تعریف مسیر ماسک.
  • اگر توسعه دهندگان برنامه از روش Icon.createWithAdaptiveBitmap() استفاده نکنند یا از این روش به درستی استفاده نکنند، نمادهای میانبر بزرگنمایی شده است. برای اینکه این روش به درستی عمل کند، باید در Bitmap 25% از هر چهار طرف padded شود.

این مسائل را می توان به شرح زیر بررسی کرد:

  • ماسک باید در سیستم مختصات [0, 100] x [0, 100] تعریف شود.
  • مطمئن شوید که تصاویر مورد استفاده برای نمادهای تطبیقی ​​(نمادهای راه‌انداز، میانبرها) دارای بالشتک کافی (25%) در هر چهار طرف هستند.