Implementare icone adattive

Le icone adattive mantengono una forma coerente all'interno del dispositivo, ma variano da dispositivo a dispositivo con un solo asset icona fornito dallo sviluppatore. Inoltre, le icone supporta due livelli (primo piano e sfondo) utilizzabili per il movimento offrire agli utenti un'esperienza visiva.

Gli strumenti di implementazione dei dispositivi forniscono una maschera per il dispositivo che deciderà la forma di tutte le icone su dispositivo. Questa icona verrà utilizzata su tutte le piattaforme UI di sistema che utilizzano le icone di Avvio app (ad es. Avvio app, 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 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 il percorso definizione. Questo formato di PathData è quello che può essere utilizzato dai vettori Android assistenza.

Questo percorso deve essere convesso e deve rispettare la zona sicura (66/71 = 91%) all'interno limiti della vista. Questo aspetto 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 il valore di configurazione su false o non eseguirlo. specificare questo valore di configurazione.

API Adaptive Icon

Di seguito è mostrata l'API per la classe AdaptiveIconDrawable:

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 dei riferimenti

Non è necessario fare nulla per visualizzare le icone adattive statiche su Piattaforme UI di sistema. Quando PackageManager restituisce un drawable, è sufficiente associarlo a un'immagine ImageView. Questo è il modo in cui le icone vengono già visualizzate nelle piattaforme pre-O.

In merito al rendering dell'effetto di movimento dinamico, Avvio app3 (platform/packages/apps/Launcher3) presenta un'implementazione di riferimento che mostra come ottenere l'effetto in O-MR1.

Convalida

Per convalidare l'implementazione, dopo aver eseguito l'override della maschera di loro gradimento, consulta se le icone vengono visualizzate correttamente in Avvio app3, Impostazioni, Panoramica e Impostazioni. Puoi anche eseguire AdaptiveIconDrawableTest.java e AdaptiveIconMaskTest.java all'interno della grafica CTS TestCase per testare l'implementazione.

È possibile trovare uno scenario di test manuale consigliato all'indirizzo: platform/svelopment/samples/AdaptiveIconSample/.

Problemi noti

I problemi noti includono:

  • Icone sfocate, a seconda di come è definito il percorso della maschera.
  • Le icone delle scorciatoie ingrandite se gli sviluppatori di app non utilizzano Icon.createWithAdaptiveBitmap() oppure non usare questo metodo correttamente. Affinché questo metodo funzioni correttamente, il valore passato in bitmap deve essere imbottito al 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 usate per le icone adattive (icone in Avvio applicazioni , scorciatoie) abbiano una spaziatura interna sufficiente (25%) su tutti e quattro i lati.