Ikon Adaptif mempertahankan bentuk yang konsisten dalam perangkat, tetapi bervariasi dari perangkat ke perangkat dengan hanya satu aset ikon yang disediakan oleh developer. Selain itu, ikon mendukung dua lapisan (latar depan dan latar belakang) yang dapat digunakan untuk gerakan guna memberikan kenikmatan visual kepada pengguna.
Implementator perangkat menyediakan mask perangkat yang akan menentukan bentuk semua ikon di perangkat. Ikon ini akan digunakan di platform UI sistem yang menggunakan Ikon Peluncur (misalnya, peluncur, ringkasan, setelan, dan sheet berbagi).
Contoh dan sumber
Contoh kode:
platform/development/samples/AdaptiveIconSample/
Dokumentasi developer:
Kode sumber:
platform/frameworks/base/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
Implementasi
Untuk mengubah bentuk ikon di platform, tumpang-tindih satu string di
framework/base/core/res/res/values/config.xml
, sebagai berikut:
<!-- 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>
Format dan sintaksis string mengikuti W3, standar SVG untuk definisi jalur. Format ini untuk PathData juga didukung oleh vektor drawable Android.
Jalur ini harus cembung dan harus mematuhi zona aman (66/71 = 91%) dalam batas tampilan. Hal ini diterapkan di salah satu pengujian CTS.
Jika Anda memutuskan untuk menggunakan lingkaran sebagai mask platform, pastikan juga untuk menempatkan config_useRoundIcon = true. Jika tidak, tetapkan nilai konfigurasi ini ke salah (false) atau jangan tentukan nilai konfigurasi ini.
Adaptive Icon API
API untuk class AdaptiveIconDrawable
ditampilkan di bawah ini:
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(); }
Penerapan referensi
Tidak perlu melakukan apa pun untuk merender ikon adaptif statis di salah satu platform UI Sistem. Saat PackageManager menampilkan drawable, cukup ikat ke ImageView. Beginilah ikon sudah dirender di platform Pra-O.
Terkait rendering efek gerakan dinamis, Launcher3 (platform/packages/apps/Launcher3) akan memiliki implementasi referensi yang menunjukkan cara mendapatkan efek di O-MR1.
Validasi
Untuk memvalidasi penerapan, setelah mengganti mask sesuai keinginan, lihat apakah ikon dirender dengan benar di Launcher3, Setelan, Ringkasan, dan Setelan. Anda juga dapat menjalankan AdaptiveIconDrawableTest.java dan AdaptiveIconMaskTest.java di dalam TestCase CTS grafis untuk menguji penerapannya.
Kasus pengujian manual yang direkomendasikan dapat ditemukan di: platform/development/samples/AdaptiveIconSample/.
Masalah umum
Masalah umum mencakup hal berikut:
- Ikon buram, bergantung pada cara jalur mask ditentukan.
- Ikon pintasan yang diperbesar jika developer aplikasi tidak menggunakan
metode
Icon.createWithAdaptiveBitmap()
, atau tidak menggunakan metode ini dengan benar. Agar metode ini berfungsi dengan baik, Bitmap yang diteruskan harus diberi padding 25% di keempat sisinya.
Masalah ini dapat diatasi sebagai berikut:
- Mask harus ditentukan dalam sistem koordinat [0, 100] x [0, 100].
- Pastikan gambar yang digunakan untuk ikon adaptif (ikon peluncur , pintasan) memiliki padding yang memadai (25%) di keempat sisinya.