Implementare le icone adattive

Le icone adattabili mantengono una forma coerente all'interno del dispositivo, ma variano da un dispositivo all'altro con un solo asset icona fornito dallo sviluppatore. Inoltre, le icone supportano due livelli (primo piano e sfondo) che possono essere utilizzati per il movimento al fine di offrire agli utenti un'esperienza visiva piacevole.

Gli implementatori del dispositivo forniscono una maschera del dispositivo che decide la forma di tutte le icone su un dispositivo. Questa icona verrà utilizzata in tutte le piattaforme dell'interfaccia utente di sistema che utilizzano le icone in Avvio applicazioni (ad es. Avvio applicazioni, Panoramica, Impostazioni e riquadro di condivisione).

Esempi e origine

Esempi di codice:

  • platform/development/samples/AdaptiveIconSample/

Documentazione per gli sviluppatori:

Codice sorgente:

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

Implementazione

Per modificare la forma dell'icona su una piattaforma, sovrapponi una stringa in framework/base/core/res/res/values/config.xml, come segue:

<!-- 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>

Il formato e la sintassi della stringa rispettano lo standard W3, SVG per la definizione del percorso. Questo formato per PathData è supportato anche dagli elementi Drawable vettoriali Android.

Questo percorso deve essere convesso e rispettare la zona sicura (66/71 = 91%) all'interno dei limiti della visualizzazione. Questo viene applicato in uno dei test CTS.

Se decidi di utilizzare un cerchio come maschera della piattaforma, assicurati di sovrapporre anche config_useRoundIcon = true. In caso contrario, imposta questo valore di configurazione su false o non specificarlo.

API Adaptive Icon

L'API per la classe AdaptiveIconDrawable è mostrata di seguito:

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();
    }

Implementazione di riferimento

Non è necessario fare nulla per visualizzare le icone adattabili statiche su nessuna delle piattaforme dell'interfaccia utente di sistema. Quando PackageManager restituisce un drawable, basta associarlo a un ImageView. È così che le icone vengono già visualizzate nelle piattaforme pre-O.

Per quanto riguarda il rendering dell'effetto di movimento dinamico, Launcher3 (platform/packages/apps/Launcher3) avrà un'implementazione di riferimento che mostra come ottenere l'effetto in O-MR1.

Convalida

Per convalidare l'implementazione, dopo aver sostituito la maschera che preferisce, controlla se le icone vengono visualizzate correttamente in Avvio3, Impostazioni, Panoramica e Impostazioni. Puoi anche eseguire AdaptiveIconDrawableTest.java e AdaptiveIconMaskTest.java all'interno del test case CTS di grafica per testare l'implementazione.

Un caso di test manuale consigliato è disponibile all'indirizzo: platform/development/samples/AdaptiveIconSample/.

Problemi noti

I problemi noti includono:

  • Icone sfocate, a seconda di come è definito il percorso della maschera.
  • Icone delle scorciatoie ingrandite se gli sviluppatori di app non utilizzano il metodo Icon.createWithAdaptiveBitmap() o non lo utilizzano correttamente. Affinché questo metodo funzioni correttamente, il bitmap passato deve essere con un padding del 25% su tutti e quattro i lati.

Questi problemi possono essere risolti nel seguente modo:

  • La maschera deve essere definita nel sistema di coordinate [0, 100] x [0, 100].
  • Assicurati che le immagini utilizzate per le icone adattabili (icone di Avvio applicazioni , scorciatoie) abbiano un'area di a capo sufficiente (25%) su tutti e quattro i lati.