Menerapkan ikon adaptif

Ikon Adaptif mempertahankan bentuk yang konsisten di dalam perangkat tetapi bervariasi dari satu perangkat ke perangkat lainnya 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 guna memberikan kenikmatan visual kepada pengguna.

Pelaksana perangkat menyediakan masker perangkat yang akan menentukan bentuk semua ikon pada perangkat. Ikon ini akan digunakan pada permukaan UI sistem apa pun yang menggunakan Ikon Peluncur (misalnya, peluncur, ikhtisar, pengaturan, 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 sintaksis 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 di salah satu tes CTS.

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

API Ikon Adaptif

API untuk kelas AdaptiveIconDrawable ditampilkan di bawah:

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 pada permukaan UI Sistem mana pun. Saat PackageManager mengembalikan drawable, cukup ikat ke ImageView. Beginilah cara ikon dirender di platform Pra-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 penerapannya, setelah mengganti topeng sesuai keinginannya, lihat apakah ikon ditampilkan dengan benar di Peluncur3, Pengaturan, Ikhtisar, dan Pengaturan. Anda juga dapat menjalankan AdaptiveIconDrawableTest.java dan AdaptiveIconMaskTest.java di dalam grafis CTS TestCase untuk menguji implementasinya.

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

Masalah Dikenal

Masalah yang diketahui meliputi hal berikut:

  • Ikon buram, bergantung pada bagaimana jalur topeng ditentukan.
  • Ikon pintasan 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 diberi bantalan 25% di keempat sisinya.

Masalah-masalah ini dapat diatasi sebagai berikut:

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