Implémenter des icônes adaptatives

Les icônes adaptatives conservent une forme cohérente au sein de l'appareil, mais varient d'un appareil à l'autre avec une seule icône fournie par le développeur. De plus, les icônes prennent en charge deux couches (premier plan et arrière-plan) qui peuvent être utilisées pour le mouvement afin d'offrir un plaisir visuel aux utilisateurs.

Les implémenteurs de périphériques fournissent un masque de périphérique qui décidera de la forme de toutes les icônes d'un périphérique. Cette icône sera utilisée sur toutes les surfaces de l'interface utilisateur du système qui utilisent des icônes de lancement (par exemple, lanceur, aperçu, paramètres et feuille de partage).

Exemples et source

Exemples de codes :

  • platform/development/samples/AdaptiveIconSample/

Documentation du développeur :

Code source:

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

Mise en œuvre

Pour modifier la forme de l'icône sur une plate-forme, superposez une chaîne dans framework/base/core/res/res/values/config.xml , comme suit :

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

Le format et la syntaxe de la chaîne suivent la norme W3, SVG pour la définition de chemin . Ce format pour PathData est également pris en charge par les dessins vectoriels Android.

Ce chemin doit être convexe et doit respecter la zone de sécurité (66/71 = 91 %) dans les limites de la vue. Ceci est appliqué dans l’un des tests CTS.

Si vous décidez d'utiliser un cercle comme masque de plate-forme, assurez-vous également de superposer config_useRoundIcon = true. Sinon, définissez cette valeur de configuration sur false ou ne spécifiez pas cette valeur de configuration.

API d'icônes adaptatives

L'API de la classe AdaptiveIconDrawable est présentée ci-dessous :

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

Implémentation de référence

Rien ne doit être fait pour afficher les icônes adaptatives statiques sur l'une des surfaces de l'interface utilisateur système. Lorsque PackageManager renvoie un dessin, liez-le simplement à un ImageView. C'est ainsi que les icônes sont déjà rendues sur les plateformes Pre-O.

Concernant le rendu de l'effet de mouvement dynamique, Launcher3 (plateforme/packages/apps/Launcher3) aura une implémentation de référence montrant comment obtenir l'effet dans O-MR1.

Validation

Pour valider l'implémentation, après avoir remplacé le masque de votre choix, vérifiez si les icônes sont rendues correctement dans Launcher3, Paramètres, Présentation et Paramètres. Vous pouvez également exécuter AdaptiveIconDrawableTest.java et AdaptiveIconMaskTest.java dans Graphics CTS TestCase pour tester l'implémentation.

Un cas de test manuel recommandé peut être trouvé à l’adresse : platform/development/samples/AdaptiveIconSample/.

Problèmes connus

Les problèmes connus sont les suivants :

  • Icônes floues, selon la façon dont le chemin du masque est défini.
  • Icônes de raccourci agrandies si les développeurs d'applications n'utilisent pas la méthode Icon.createWithAdaptiveBitmap() ou n'utilisent pas cette méthode correctement. Pour que cette méthode fonctionne correctement, le bitmap transmis doit être complété à 25 % sur les quatre côtés.

Ces problèmes peuvent être résolus comme suit :

  • Le masque doit être défini dans le système de coordonnées [0, 100] x [0, 100].
  • Assurez-vous que les images utilisées pour les icônes adaptatives (icônes de lancement, raccourcis) ont un remplissage suffisant (25 %) sur les quatre côtés.