Les icônes adaptatives conservent une forme cohérente sur un même appareil, mais varient d'un appareil à l'autre avec un seul élément d'icône fourni par le développeur. De plus, les icônes sont compatibles avec deux calques (premier plan et arrière-plan) qui peuvent être utilisés pour le mouvement afin de ravir les utilisateurs.
Les implémentateurs d'appareils fournissent un masque d'appareil qui déterminera la forme de toutes les icônes d'un appareil. Cette icône sera utilisée sur toutes les surfaces de l'UI du système qui utilisent des icônes de lanceur (par exemple, le lanceur, l'aperçu, les paramètres et la feuille de partage).
Exemples et source
Exemples de code:
platform/development/samples/AdaptiveIconSample/
Documentation pour les développeurs:
Code source :
platform/frameworks/base/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
Implémentation
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 respectent la norme SVG W3 pour la définition de tracés. Ce format pour PathData est également compatible avec les drawables vectoriels Android.
Ce chemin doit être convexe et respecter la zone de sécurité (66/71 = 91%) dans les limites de la vue. Cette règle est appliquée dans l'un des tests CTS.
Si vous décidez d'utiliser un cercle comme masque de plate-forme, veillez également à superposer config_useRoundIcon = true. Sinon, définissez cette valeur de configuration sur "false" ou ne la spécifiez pas.
API Adaptive Icon
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
Aucune action n'est requise pour afficher les icônes adaptatives statiques sur l'une des surfaces de l'interface utilisateur du système. Lorsque PackageManager renvoie un drawable, associez-le simplement à un ImageView. C'est ainsi que les icônes sont déjà affichées sur les plates-formes pré-O.
En ce qui concerne le rendu de l'effet de mouvement dynamique, Launcher3 (platform/packages/apps/Launcher3) disposera d'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 son choix, vérifiez si les icônes sont affichées correctement dans Launcher3, Paramètres, Aperçu et Paramètres. Vous pouvez également exécuter AdaptiveIconDrawableTest.java et AdaptiveIconMaskTest.java dans le test de cas CTS Graphics pour tester l'implémentation.
Vous trouverez un cas de test manuel recommandé à l'adresse : platform/development/samples/AdaptiveIconSample/.
Problèmes connus
Voici les problèmes connus:
- Icônes floues, en fonction de la définition du chemin du masque.
- Icônes de raccourci agrandies si les développeurs d'applications n'utilisent pas la méthode
Icon.createWithAdaptiveBitmap()
ou ne l'utilisent pas correctement. Pour que cette méthode fonctionne correctement, le bitmap transmis doit être rempli à 25% sur les quatre côtés.
Pour résoudre ces problèmes, procédez 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 lanceur , raccourcis) comportent une marge intérieure suffisante (25%) sur les quatre côtés.