Implementieren Sie adaptive Symbole

Adaptive Symbole behalten geräteintern eine einheitliche Form bei, variieren jedoch von Gerät zu Gerät, da vom Entwickler nur ein Symbolelement bereitgestellt wird. Darüber hinaus unterstützen Symbole zwei Ebenen (Vordergrund und Hintergrund), die für Bewegungen verwendet werden können, um Benutzern visuelle Freude zu bereiten.

Geräteimplementierer stellen eine Gerätemaske bereit, die die Form aller Symbole auf einem Gerät bestimmt. Dieses Symbol wird auf allen Benutzeroberflächen des Systems verwendet, die Launcher-Symbole verwenden (z. B. Launcher, Übersicht, Einstellungen und Freigabeblatt).

Beispiele und Quelle

Codebeispiele:

  • platform/development/samples/AdaptiveIconSample/

Entwicklerdokumentation:

Quellcode:

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

Implementierung

Um die Form des Symbols auf einer Plattform zu ändern, überlagern Sie eine Zeichenfolge in framework/base/core/res/res/values/config.xml wie folgt:

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

Das Format und die Syntax der Zeichenfolge folgen dem W3- und SVG-Standard für die Pfaddefinition . Dieses Format für PathData wird auch von Android Vector Drawables unterstützt.

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

Wenn Sie sich für die Verwendung eines Kreises als Plattformmaske entscheiden, stellen Sie sicher, dass auch config_useRoundIcon = true überlagert wird. Wenn nicht, setzen Sie diesen Konfigurationswert auf „false“ oder geben Sie diesen Konfigurationswert nicht an.

Adaptive Icon-API

Die API für die AdaptiveIconDrawable Klasse 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

Es muss nichts unternommen werden, um die statischen adaptiven Symbole auf einer der System-UI-Oberflächen darzustellen. Wenn PackageManager ein Zeichenelement zurückgibt, binden Sie dieses einfach an eine ImageView. Auf diese Weise werden Symbole bereits in Pre-O-Plattformen gerendert.

In Bezug auf das Rendern dynamischer Bewegungseffekte verfügt Launcher3 (Plattform/Pakete/Apps/Launcher3) über eine Referenzimplementierung, die zeigt, wie der Effekt in O-MR1 erzielt wird.

Validierung

Um die Implementierung zu validieren, überprüfen Sie nach dem Überschreiben der gewünschten Maske, ob die Symbole in Launcher3, Einstellungen, Übersicht und Einstellungen korrekt gerendert werden. Sie können AdaptiveIconDrawableTest.java und AdaptiveIconMaskTest.java auch in Graphics CTS TestCase 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:

  • Verschwommene Symbole, je nachdem, wie der Maskenpfad definiert ist.
  • Vergrößerte Verknüpfungssymbole, wenn App-Entwickler die Methode Icon.createWithAdaptiveBitmap() nicht oder nicht ordnungsgemäß verwenden. Damit diese Methode ordnungsgemäß funktioniert, sollte die übergebene Bitmap auf allen vier Seiten um 25 % aufgefüllt werden.

Diese Probleme können wie folgt angegangen werden:

  • Die Maske sollte im Koordinatensystem [0, 100] x [0, 100] definiert werden.
  • Stellen Sie sicher, dass Bilder, die für adaptive Symbole (Launcher-Symbole, Verknüpfungen) verwendet werden, auf allen vier Seiten über eine ausreichende Polsterung (25 %) verfügen.