Google 致力于为黑人社区推动种族平等。查看具体举措
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Implementazione di 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 un 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 tutte le superfici dell'interfaccia utente del sistema che utilizzano icone di avvio (ad esempio, launcher, panoramica, impostazioni e foglio di condivisione).

Esempi e fonte

Esempi di codice:

  • platform/development/samples/AdaptiveIconSample/

Documentazione per sviluppatori:

Codice sorgente:

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

Implementazione

Per cambiare 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 è ciò che supportano anche i drawable vettoriali di Android.

Questo percorso dovrebbe essere convesso e dovrebbe rispettare la zona sicura (66/71 = 91%) entro i limiti di 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, impostare questo valore di configurazione su false o non specificare questo valore di configurazione.

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 eseguire alcuna operazione per eseguire il rendering delle icone adattive statiche su qualsiasi superficie dell'interfaccia utente di sistema. Quando PackageManager restituisce un oggetto disegnabile, associatelo semplicemente a un ImageView. Questo è il modo in cui le icone sono già renderizzate nelle piattaforme Pre-O.

Per quanto riguarda il rendering dell'effetto di movimento dinamico, Launcher3 (piattaforma / packages / apps / 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, controlla se le icone sono renderizzate correttamente in Launcher3, Impostazioni, Panoramica e Impostazioni. È inoltre possibile eseguire AdaptiveIconDrawableTest.java e AdaptiveIconMaskTest.java all'interno di Graphics CTS TestCase per testare l'implementazione.

Un caso di test manuale consigliato può essere trovato su: platform / development / samples / AdaptiveIconSample /.

Problemi noti

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 correttamente questo metodo. Affinché questo metodo funzioni correttamente, il bitmap passato dovrebbe 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 sufficiente (25%) su tutti e quattro i lati.