Implementare icone adattive

Le icone adattive mantengono una forma coerente all'interno del dispositivo ma variano da dispositivo a dispositivo con una sola risorsa icona fornita dallo sviluppatore. Inoltre, le icone supportano due livelli (primo piano e sfondo) che possono essere utilizzati per il movimento per fornire piacere visivo agli utenti.

Gli implementatori del dispositivo forniscono una maschera del dispositivo che deciderà la forma di tutte le icone su un dispositivo. Questa icona verrà utilizzata su qualsiasi superficie dell'interfaccia utente del sistema che utilizza le icone di avvio (ad esempio, avvio, panoramica, impostazioni e foglio di condivisione).

Esempi e fonte

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 seguono lo standard W3, SVG per la definizione del percorso . Questo formato per PathData è quello supportato anche dai drawable vettoriali Android.

Questo percorso dovrebbe essere convesso e rispettare la zona sicura (66/71 = 91%) all'interno dei limiti della vista. 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 delle icone adattive

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 eseguire il rendering delle icone adattive statiche su una qualsiasi delle superfici dell'interfaccia utente del sistema. Quando PackageManager restituisce un drawable, associalo semplicemente a ImageView. Ecco come vengono già renderizzate le icone nelle piattaforme Pre-O.

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

Validazione

Per convalidare l'implementazione, dopo aver sovrascritto la maschera di loro gradimento, verificare se le icone vengono renderizzate correttamente in Launcher3, Impostazioni, Panoramica e Impostazioni. Puoi anche eseguire AdaptiveIconDrawableTest.java e AdaptiveIconMaskTest.java all'interno del CTS TestCase grafico per testare l'implementazione.

Un caso di test manuale consigliato è disponibile in: platform/development/samples/AdaptiveIconSample/.

Problemi conosciuti

I problemi noti includono quanto segue:

  • Icone sfocate, a seconda di come è definito il percorso della maschera.
  • Icone di collegamento ingrandite se gli sviluppatori di app non utilizzano il metodo Icon.createWithAdaptiveBitmap() o non utilizzano questo metodo correttamente. Affinché questo metodo funzioni correttamente, il passaggio in Bitmap deve essere riempito del 25% su tutti e quattro i lati.

Questi problemi possono essere risolti come segue:

  • La maschera deve essere definita nel sistema di coordinate [0, 100] x [0, 100].
  • Assicurati che le immagini utilizzate per le icone adattive (icone di avvio, scorciatoie) abbiano una spaziatura interna sufficiente (25%) su tutti e quattro i lati.