अडैप्टिव आइकॉन, डिवाइस के हिसाब से एक जैसा आकार बनाए रखते हैं. हालांकि, ये डिवाइस के हिसाब से अलग-अलग होते हैं. इसके लिए, डेवलपर सिर्फ़ एक आइकॉन एसेट उपलब्ध कराता है. इसके अलावा, आइकॉन में दो लेयर (फ़ोरग्राउंड और बैकग्राउंड) काम करती हैं. इनका इस्तेमाल, उपयोगकर्ताओं को बेहतर विज़ुअल अनुभव देने के लिए, मोशन में किया जा सकता है.
डिवाइस लागू करने वाले लोग, डिवाइस का मास्क उपलब्ध कराते हैं. इससे डिवाइस पर मौजूद सभी आइकॉन का आकार तय होता है. इस आइकॉन का इस्तेमाल, सिस्टम यूज़र इंटरफ़ेस (यूआई) के उन सभी प्लैटफ़ॉर्म पर किया जाएगा जिनमें लॉन्चर आइकॉन का इस्तेमाल किया जाता है. जैसे, लॉन्चर, खास जानकारी, सेटिंग, और शेयर शीट.
उदाहरण और सोर्स
कोड के उदाहरण:
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%) के मुताबिक होना चाहिए. यह सीटीएस के किसी एक टेस्ट में लागू किया जाता है.
अगर आपको प्लैटफ़ॉर्म मास्क के तौर पर सर्कल का इस्तेमाल करना है, तो ज़रूर से 'config_useRoundIcon = true' को ओवरले करें. अगर ऐसा नहीं है, तो इस कॉन्फ़िगरेशन वैल्यू को गलत पर सेट करें या इस कॉन्फ़िगरेशन वैल्यू को तय न करें.
Adaptive Icon 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 से लिंक करें. ओएस ओ के पहले के वर्शन वाले प्लैटफ़ॉर्म पर, आइकॉन पहले से ही इस तरह रेंडर किए जाते हैं.
डाइनैमिक मोशन इफ़ेक्ट को रेंडर करने के लिए, Launcher3 (platform/packages/apps/Launcher3) में रेफ़रंस लागू किया जाएगा. इससे, O-MR1 में इफ़ेक्ट पाने का तरीका पता चलेगा.
पुष्टि करें
लागू करने की पुष्टि करने के लिए, अपनी पसंद के मास्क को बदलने के बाद, देखें कि आइकॉन, Launcher3, सेटिंग, खास जानकारी, और सेटिंग में सही तरीके से रेंडर हो रहे हैं या नहीं. लागू करने की जांच करने के लिए, ग्राफ़िक्स CTS TestCase में AdaptiveIconDrawableTest.java और AdaptiveIconMaskTest.java को भी चलाया जा सकता है.
मैन्युअल तरीके से टेस्ट करने के लिए सुझाया गया केस, यहां देखा जा सकता है: platform/development/samples/AdaptiveIconSample/.
पहले से मालूम समस्याएं
आम तौर पर होने वाली समस्याओं में ये शामिल हैं:
- मास्क पाथ के तय किए जाने के तरीके के आधार पर, धुंधले आइकॉन.
- ज़ूम इन किए गए शॉर्टकट आइकॉन, अगर ऐप्लिकेशन डेवलपर
Icon.createWithAdaptiveBitmap()
तरीके का इस्तेमाल नहीं करते हैं या इस तरीके का सही तरीके से इस्तेमाल नहीं करते हैं. इस तरीके के सही तरीके से काम करने के लिए, पास किए गए बिटमैप को चारों तरफ़ से 25% पैड किया जाना चाहिए.
इन समस्याओं को ठीक करने के लिए, यह तरीका अपनाएं:
- मास्क को [0, 100] x [0, 100] निर्देशांक सिस्टम में तय किया जाना चाहिए.
- पक्का करें कि अडैप्टिव आइकॉन (लॉन्चर आइकॉन , शॉर्टकट) के लिए इस्तेमाल की गई इमेज के चारों तरफ़ ज़रूरत के मुताबिक पैडिंग (25%) हो.