Implementar íconos adaptables

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

Los implementadores de dispositivos proporcionan una máscara de dispositivo que decidirá la forma de todos los iconos de un dispositivo. Este ícono se usará en cualquier superficie de la interfaz de usuario del sistema que use íconos del iniciador (por ejemplo, iniciador, descripción general, configuración y hoja para compartir).

Ejemplos y fuente

Ejemplos de código:

  • platform/development/samples/AdaptiveIconSample/

Documentación del desarrollador:

Código fuente:

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

Implementación

Para cambiar la forma del icono en una plataforma, superponga 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 definición de ruta . Este formato para PathData es lo que también admiten los elementos de diseño vectoriales de Android.

Este camino debe ser convexo y respetar la zona segura (66/71 = 91%) dentro de los límites de la vista. Esto se aplica en una de las pruebas CTS.

Si decide utilizar un círculo como máscara de plataforma, asegúrese de superponer también config_useRoundIcon = true. De lo contrario, establezca este valor de configuración en falso o no especifique este valor de configuración.

API de iconos adaptables

La API para la clase AdaptiveIconDrawable se muestra a continuación:

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 hacer nada para representar los íconos adaptativos estáticos en cualquiera de las superficies de la interfaz de usuario del sistema. Cuando PackageManager devuelve un elemento de diseño, simplemente vincúlelo a un ImageView. Así es como ya se representan los íconos en las plataformas Pre-O.

Con respecto a la representación del efecto de movimiento dinámico, Launcher3 (plataforma/paquetes/aplicaciones/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 agrado, vea si los íconos se representan correctamente en Launcher3, Configuración, Descripción general y Configuración. También puede ejecutar AdaptiveIconDrawableTest.java y AdaptiveIconMaskTest.java dentro de gráficos CTS TestCase para probar la implementación.

Puede encontrar un caso de prueba manual recomendado en: plataforma/desarrollo/samples/AdaptiveIconSample/.

Problemas conocidos

Los problemas conocidos incluyen los siguientes:

  • Iconos borrosos, dependiendo de cómo se defina la ruta de la máscara.
  • Íconos de acceso directo ampliados si los desarrolladores de aplicaciones no usan el método Icon.createWithAdaptiveBitmap() o no usan este método correctamente. Para que este método funcione correctamente, el mapa de bits pasado debe rellenarse un 25% en los cuatro lados.

Estas cuestiones se pueden abordar de la siguiente manera:

  • La máscara debe definirse en el sistema de coordenadas [0, 100] x [0, 100].
  • Asegúrese de que las imágenes utilizadas para los íconos adaptables (íconos del iniciador, accesos directos) tengan suficiente relleno (25%) en los cuatro lados.