Uyarlanabilir simgeler, cihaz içinde tutarlı bir şekle sahiptir ancak geliştirici tarafından sağlanan tek bir simge öğesiyle cihazdan cihaza değişiklik gösterir. Ayrıca simgeler, kullanıcılara görsel bir deneyim sunmak için hareket için kullanılabilecek iki katmanı (ön plan ve arka plan) destekler.
Cihaz uygulayıcıları, cihazdaki tüm simgelerin şekline karar verecek bir cihaz maskesi sağlar. Bu simge, başlatıcı simgelerinin kullanıldığı tüm sistem kullanıcı arayüzü yüzeylerinde (ör. başlatıcı, genel bakış, ayarlar ve paylaşım sayfası) kullanılır.
Örnekler ve kaynak
Kod örnekleri:
platform/development/samples/AdaptiveIconSample/
Geliştirici dokümanları:
Kaynak kod:
platform/frameworks/base/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
Uygulama
Bir platformdaki simgenin şeklini değiştirmek için framework/base/core/res/res/values/config.xml
içinde aşağıdaki gibi bir dize yerleĢtirin:
<!-- 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>
Dizinin biçimi ve söz dizimi, yol tanımı için W3, SVG standardını izler. Android vektör çizilebilirleri de PathData için bu biçimi destekler.
Bu yol dışbükey olmalı ve görüntü sınırları içindeki güvenli alana (66/71 = %91) uymalıdır. Bu, CTS testlerinden birinde zorunlu kılınmıştır.
Platform maskesi olarak daire kullanmaya karar verirseniz config_useRoundIcon = true değerini de eklediğinizden emin olun. Aksi takdirde bu yapılandırma değerini false olarak ayarlayın veya bu yapılandırma değerini belirtmeyin.
Uyarlanabilir Simge API'si
AdaptiveIconDrawable
sınıfının API'si aşağıda gösterilmiştir:
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(); }
Referans uygulama
Statik uyarlanabilir simgeleri sistem kullanıcı arayüzü yüzeylerinin hiçbirinde oluşturmak için herhangi bir işlem yapılması gerekmez. PackageManager bir drawable döndürdüğünde bunu bir ImageView'a bağlamanız yeterlidir. Simgeler, O öncesi platformlarda zaten bu şekilde oluşturulur.
Dinamik hareket efektinin oluşturulmasıyla ilgili olarak, O-MR1'de efektin nasıl elde edileceğini gösteren bir referans uygulama Launcher3'te (platform/packages/apps/Launcher3) yer alacaktır.
Doğrulama
Uygulamayı doğrulamak için, istedikleri maskeyi geçersiz kıldıktan sonra simgelerin Launcher3, Ayarlar, Genel Bakış ve Ayarlar'da doğru şekilde oluşturulup oluşturulmadığını kontrol edin. Ayrıca, uygulamayı test etmek için grafik CTS TestCase içinde AdaptiveIconDrawableTest.java ve AdaptiveIconMaskTest.java dosyalarını da çalıştırabilirsiniz.
Önerilen manuel test örneğini şu adreste bulabilirsiniz: platform/development/samples/AdaptiveIconSample/.
Bilinen sorunlar
Bilinen sorunlar arasında aşağıdakiler bulunur:
- Maske yolunun nasıl tanımlandığına bağlı olarak bulanık simgeler.
- Uygulama geliştiriciler
Icon.createWithAdaptiveBitmap()
yöntemini kullanmıyorsa veya bu yöntemi doğru şekilde kullanmıyorsa yakınlaştırılmış kısayol simgeleri Bu yöntemin düzgün çalışması için iletilen Bitmap'in dört kenarından da% 25 doldurulması gerekir.
Bu sorunlar aşağıdaki şekilde ele alınabilir:
- Maske [0, 100] x [0, 100] koordinat sisteminde tanımlanmalıdır.
- Uyarlanabilir simgeler (başlatıcı simgeleri , kısayollar) için kullanılan resimlerin dört tarafının da yeterince doldurulduğundan (%25) emin olun.