Menerapkan Ikon Adaptif

Ikon Adaptif mempertahankan bentuk intra-perangkat yang konsisten tetapi bervariasi dari perangkat ke perangkat dengan hanya satu aset ikon yang disediakan oleh pengembang. Selain itu, ikon mendukung dua lapisan (latar depan dan latar belakang) yang dapat digunakan untuk gerakan untuk memberikan kesenangan visual kepada pengguna.

Pelaksana perangkat menyediakan topeng perangkat yang akan menentukan bentuk semua ikon pada perangkat. Ikon ini akan digunakan pada semua permukaan UI sistem yang menggunakan Ikon Peluncur (misalnya, peluncur, ikhtisar, setelan, dan lembar berbagi).

Contoh dan sumber

Contoh kode:

  • platform/development/samples/AdaptiveIconSample/

Dokumentasi pengembang:

Kode sumber:

  • platform/frameworks/base/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java

Penerapan

Untuk mengubah bentuk ikon pada platform, overlay 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 sintaks string mengikuti standar W3, SVG untuk definisi jalur . Format untuk PathData ini juga didukung oleh sumber daya dapat digambar untuk vektor Android.

Jalur ini harus cembung dan harus menghormati zona aman (66/71 = 91%) dalam batas tampilan. Ini diterapkan dalam salah satu tes CTS.

Jika Anda memutuskan untuk menggunakan lingkaran sebagai topeng platform, pastikan juga overlay config_useRoundIcon = true. Jika tidak, setel nilai konfigurasi ini salah atau jangan tentukan nilai konfigurasi ini.

API Ikon Adaptif

API untuk kelas AdaptiveIconDrawable ditunjukkan 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();
    }

Implementasi referensi

Tidak ada yang perlu dilakukan untuk merender ikon adaptif statis di salah satu permukaan UI Sistem. Saat PackageManager mengembalikan drawable, cukup ikat itu ke ImageView. Ini adalah bagaimana ikon sudah dirender di platform Pre-O.

Mengenai rendering efek gerakan dinamis, Launcher3 (platform/paket/aplikasi/Launcher3) akan memiliki implementasi referensi yang menunjukkan cara mencapai efek di O-MR1.

Validasi

Untuk memvalidasi implementasi, setelah mengganti topeng yang mereka sukai, lihat apakah ikon ditampilkan dengan benar di Launcher3, Pengaturan, Tinjauan, dan Pengaturan. Anda juga dapat menjalankan AdaptiveIconDrawableTest.java dan AdaptiveIconMaskTest.java di dalam grafik CTS TestCase untuk menguji implementasinya.

Kasus uji manual yang direkomendasikan dapat ditemukan di: platform/development/samples/AdaptiveIconSample/.

Masalah Dikenal

Masalah yang diketahui meliputi hal-hal berikut:

  • Ikon buram, tergantung pada bagaimana jalur topeng ditentukan.
  • Ikon pintasan yang diperbesar jika pengembang aplikasi tidak menggunakan metode Icon.createWithAdaptiveBitmap() , atau tidak menggunakan metode ini dengan benar. Agar metode ini berfungsi dengan baik, bitmap yang diteruskan harus diisi 25% di keempat sisinya.

Masalah-masalah ini dapat diatasi sebagai berikut:

  • Topeng harus didefinisikan dalam sistem koordinat [0, 100] x [0, 100].
  • Pastikan gambar yang digunakan untuk ikon adaptif (ikon peluncur , pintasan) memiliki bantalan yang cukup (25%) di keempat sisinya.