Les icônes adaptatives conservent une forme cohérente au sein de l'appareil, mais varient d'un appareil à l'autre appareil avec un seul élément d'icône fourni par le développeur. De plus, les icônes prennent en charge deux calques (premier plan et arrière-plan) qui peuvent être utilisés pour le mouvement apportent un plaisir visuel aux utilisateurs.
Les responsables de la mise en œuvre de l'appareil fournissent un masque d'appareil qui décide de la forme de toutes les icônes sur un appareil. Cette icône sera utilisée sur toutes les surfaces d'UI du système qui utilisent des icônes de lanceur (par exemple, lanceur d'applications, présentation, paramètres et feuille de partage).
Exemples et source
Exemples de code:
platform/development/samples/AdaptiveIconSample/
Documentation pour les développeurs:
- <ph type="x-smartling-placeholder"></ph> Icônes adaptatives
- <ph type="x-smartling-placeholder"></ph> AdaptiveIconDrawable
- <ph type="x-smartling-placeholder"></ph> createWithAdaptiveBitmap
Code source :
platform/frameworks/base/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
Implémentation
Pour modifier la forme de l'icône sur une plateforme, 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 le chemin d'accès. définition. Ce format pour PathData correspond à celui utilisé pour les drawables vectoriels Android. de l'assistance.
Ce chemin doit être convexe et respecter la zone de sécurité (66/71 = 91%) à l'intérieur les limites de la vue. Cela est appliqué dans l'un des tests CTS.
Si vous décidez d'utiliser un cercle comme masque de plate-forme, assurez-vous de superposer également config_useRoundIcon = true. Si ce n'est pas le cas, définissez cette valeur de configuration sur "false" ou ne spécifiez cette valeur de configuration.
API des 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
Vous n'avez rien à faire pour afficher les icônes adaptatives statiques sur les Surfaces d'UI du système Lorsque PackageManager renvoie un drawable, il suffit de le lier au ImageView. C'est ainsi que les icônes s'affichent déjà sur les plates-formes pré-O.
S'agissant du rendu de l'effet de mouvement dynamique, Launcher3 (platform/packages/apps/Launcher3) disposeront d'une implémentation de référence indiquant comment obtenir l'effet obtenu avec O-MR1.
Validation
Pour valider l'implémentation, après avoir remplacé le masque qui lui convient, consultez si les icônes s'affichent correctement dans Lanceur d'applications3, Paramètres, Aperçu et Paramètres. Vous pouvez également exécuter AdaptiveIconDrawableTest.java et AdaptiveIconMaskTest.java dans le scénario de test CTS des graphiques pour tester l'implémentation.
Vous trouverez un scénario de test manuel recommandé à l'adresse suivante: platform/development/samples/AdaptiveIconSample/.
Problèmes connus
Voici quelques problèmes connus:
- Icônes floues, en fonction de la façon dont le tracé du masque est défini
- Icônes de raccourci agrandies si les développeurs d'applications n'utilisent pas la
Icon.createWithAdaptiveBitmap()
ou n'utilisez pas cette méthode correctement. Pour que cette méthode fonctionne correctement, le bitmap transmis doit être sont rembourrées à 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 lanceur , raccourcis) avoir une marge intérieure suffisante (25%) sur les quatre côtés.