Ícones adaptativos mantêm uma forma consistente no dispositivo, mas variam de acordo com o dispositivo dispositivo com apenas um recurso de ícone fornecido pelo desenvolvedor. Além disso, os ícones dar suporte a duas camadas (primeiro e segundo planos) que podem ser usadas para movimento, e proporcionar um prazer visual aos usuários.
Os implementadores de dispositivos fornecem uma máscara que decide o formato de todos os ícones em uma dispositivo. Esse ícone vai ser usado em todas as superfícies de interface do sistema que usam ícones na tela de início. (por exemplo, acesso rápido, visão geral, configurações e planilha de compartilhamento).
Exemplos e origem
Exemplos de código:
platform/development/samples/AdaptiveIconSample/
Documentação do desenvolvedor:
Código-fonte:
platform/frameworks/base/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
Implementação
Para mudar a forma do ícone em uma plataforma, sobreponha uma string
framework/base/core/res/res/values/config.xml
, da seguinte maneira:
<!-- 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>
O formato e a sintaxe da string seguem o padrão W3, SVG para o caminho definição. Esse formato para PathData é o que os drawables vetoriais do Android com o suporte do Google Cloud.
Esse caminho deve ser convexo e respeitar a zona segura (66/71 = 91%) dentro os limites de visualização. Isso é aplicado em um dos testes do CTS.
Se você decidir usar um círculo como máscara de plataforma, sobreponha também config_useRoundIcon = true. Caso contrário, defina o valor de configuração como "false" ou não especifique esse valor de configuração.
API Adaptive Icon
A API da classe AdaptiveIconDrawable
é mostrada abaixo:
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(); }
Implementação de referência
Nada precisa ser feito para renderizar os ícones adaptativos estáticos em nenhum dos Plataformas de interface do sistema. Quando o PackageManager retorna um drawable, basta vinculá-lo ao uma ImageView. É assim que os ícones já são renderizados em plataformas pré-O.
Sobre a renderização do efeito de movimento dinâmico, o Launcher3 (platform/packages/apps/Launcher3) terá uma implementação de referência que mostra como atingir o efeito em O-MR1.
Validação
Para validar a implementação, depois de substituir a máscara que preferirem, consulte se os ícones são renderizados corretamente em Launcher3, Configurações, Visão geral e Configurações. Também é possível executar AdaptiveIconDrawableTest.java e AdaptiveIconMaskTest.java. dentro de gráficos do CTS TestCase para testar a implementação.
Um caso de teste manual recomendado pode ser encontrado em: platform/development/samples/AdaptiveIconSample/.
Problemas conhecidos
Os problemas conhecidos incluem:
- Ícones borrados, dependendo de como o caminho da máscara está definido.
- Ícones de atalho com zoom aumentado se os desenvolvedores de apps não usarem o
método
Icon.createWithAdaptiveBitmap()
ou não use esse método corretamente. Para que esse método funcione corretamente, o transmitido em Bitmap deve ser 25% de espuma nos quatro lados.
Esses problemas podem ser resolvidos da seguinte maneira:
- A máscara deve ser definida no sistema de coordenadas [0, 100] x [0, 100].
- Confira se as imagens usadas para ícones adaptativos (ícones na tela de início e atalhos) têm padding suficiente (25%) nos quatro lados.