Mengimplementasikan ikon adaptif

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.