Cómo implementar íconos adaptables

Los íconos adaptables mantienen una forma coherente dentro del dispositivo, pero varían de un dispositivo a otro. dispositivo con un solo elemento de ícono proporcionado por el desarrollador. Además, los íconos admiten dos capas (primer plano y segundo plano) que se pueden usar para que el movimiento proporcionar deleite visual a los usuarios.

Los implementadores de dispositivos proporcionan una máscara de dispositivo que decidirá la forma de todos los íconos en un dispositivo. Este ícono se usará en todas las superficies de la IU del sistema que usen íconos de selector (p.ej., selector, descripción general, configuración y hoja para compartir).

Ejemplos y fuente

Ejemplos de código:

  • platform/development/samples/AdaptiveIconSample/

Documentación para desarrolladores:

Código de origen:

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

Implementación

Para cambiar la forma del icono en una plataforma, superpone una cadena en framework/base/core/res/res/values/config.xml de la siguiente manera:

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

El formato y la sintaxis de la cadena siguen el estándar W3, SVG para la ruta de acceso. definición. Este formato para PathData es lo que pueden usar los elementos de diseño vectoriales de Android para garantizar la seguridad de los datos.

Esta ruta debe ser convexa y debe respetar la zona segura (66/71 = 91%) en los límites de la vista. Esto se aplica en una de las pruebas del CTS.

Si decides usar un círculo como máscara de plataforma, asegúrate de superponer config_useRoundIcon = true. Si no es así, establece este valor de configuración como falso o no lo hagas especifica este valor de configuración.

API de Adaptive Icon

A continuación, se muestra la API para la clase 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();
    }

Implementación de referencia

No es necesario realizar nada para renderizar los iconos adaptables estáticos en ninguna de las Superficies de la IU del sistema. Cuando PackageManager muestre un elemento de diseño, simplemente vincúlalo a un objeto ImageView. Así es como los íconos ya se renderizan en las plataformas anteriores a la O.

En cuanto a la renderización del efecto de movimiento dinámico, Launcher3 (platform/packages/apps/Launcher3) tendrá una implementación de referencia que muestra cómo lograr el efecto en O-MR1.

Validación

Para validar la implementación, después de anular la máscara de su preferencia, consulte si los íconos se renderizan correctamente en Launcher3, Configuración, Descripción general y Configuración. También puedes ejecutar AdaptiveIconDrawableTest.java y AdaptiveIconMaskTest.java dentro de los gráficos CTS TestCase para probar la implementación.

Puedes encontrar un caso de prueba manual recomendado en el siguiente vínculo: platform/development/samples/AdaptiveIconSample/.

Problemas conocidos

Los problemas conocidos incluyen los siguientes:

  • Íconos borrosos, según cómo se defina la ruta de la máscara
  • Íconos de acceso directo con zoom si los desarrolladores de apps no usan la Icon.createWithAdaptiveBitmap() o no uses este método correctamente. Para que este método funcione correctamente, el valor que se pasa en el mapa de bits debería ser relleno un 25% en los cuatro lados.

Estos problemas se pueden abordar de la siguiente manera:

  • La máscara debe definirse en el sistema de coordenadas [0, 100] x [0, 100].
  • Asegúrate de que las imágenes que se usan para los íconos adaptables (íconos de selector , combinaciones de teclas) tener suficiente padding (25%) en los cuatro lados.