Adaptive Symbole implementieren

Adaptive Symbole haben auf einem Gerät dieselbe Form, unterscheiden sich aber von Gerät zu Gerät. Der Entwickler stellt nur ein Symbol-Asset zur Verfügung. Außerdem unterstützen Symbole zwei Ebenen (Vorder- und Hintergrund), die für Bewegungen verwendet werden können, um Nutzern ein visuelles Vergnügen zu bieten.

Geräteimplementierer stellen eine Gerätemaske bereit, die die Form aller Symbole auf einem Gerät bestimmt. Dieses Symbol wird auf allen System-UI-Oberflächen verwendet, auf denen Launcher-Symbole verwendet werden (z.B. Launcher, Übersicht, Einstellungen und Freigabebereich).

Beispiele und Quelle

Codebeispiele:

  • platform/development/samples/AdaptiveIconSample/

Entwicklerdokumentation:

Quellcode:

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

Implementierung

Wenn Sie die Form des Symbols auf einer Plattform ändern möchten, legen Sie einen String in framework/base/core/res/res/values/config.xml so übereinander:

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

Format und Syntax des Strings entsprechen dem W3-SVG-Standard für die Pfaddefinition. Dieses Format für PathData wird auch von Android-Vektorgrafiken unterstützt.

Dieser Pfad sollte konvex sein und den Sicherheitsbereich (66/71 = 91%) innerhalb der Ansichtsgrenzen einhalten. Dies wird in einem der CTS-Tests erzwungen.

Wenn Sie einen Kreis als Plattformmaske verwenden, müssen Sie auch „config_useRoundIcon = true“ einfügen. Andernfalls setzen Sie diesen Konfigurationswert auf „false“ oder geben Sie ihn nicht an.

Adaptive Icon API

Die API für die Klasse AdaptiveIconDrawable ist unten dargestellt:

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();
    }

Referenzimplementierung

Für das Rendern der statischen adaptiven Symbole auf den Oberflächen der System-UI müssen Sie nichts tun. Wenn der PackageManager ein Drawable zurückgibt, binden Sie es einfach an eine ImageView. So werden Symbole bereits auf Pre-O-Plattformen gerendert.

Für das Rendern des dynamischen Bewegungseffekts gibt es in Launcher3 (platform/packages/apps/Launcher3) eine Referenzimplementierung, die zeigt, wie der Effekt in O-MR1 erreicht wird.

Zertifizierungsstufe

Um die Implementierung zu validieren, prüfen Sie nach dem Überschreiben der gewünschten Maske, ob die Symbole in Launcher3, den Einstellungen, der Übersicht und den Einstellungen korrekt gerendert werden. Sie können auch AdaptiveIconDrawableTest.java und AdaptiveIconMaskTest.java in der CTS-Testfalldatei für Grafiken ausführen, um die Implementierung zu testen.

Einen empfohlenen manuellen Testfall finden Sie unter: platform/development/samples/AdaptiveIconSample/.

Bekannte Probleme

Zu den bekannten Problemen gehören:

  • Unscharfe Symbole, je nachdem, wie der Maskenpfad definiert ist.
  • Herangezoomte Symbole für Verknüpfungen, wenn App-Entwickler die Methode Icon.createWithAdaptiveBitmap() nicht oder nicht richtig verwenden. Damit diese Methode richtig funktioniert, sollte die übergebene Bitmap an allen vier Seiten um 25% verbreitert werden.

So können Sie diese Probleme beheben:

  • Die Maske sollte im Koordinatensystem [0, 100] × [0, 100] definiert sein.
  • Achten Sie darauf, dass Bilder, die für adaptive Symbole (Launcher-Symbole, Verknüpfungen) verwendet werden, an allen vier Seiten ausreichend Abstand (25%) haben.