Zaimplementuj ikony adaptacyjne

Ikony adaptacyjne zachowują spójny kształt na urządzeniu, ale różnią się w zależności od urządzenia i obejmują tylko jedną ikonę dostarczoną przez programistę. Dodatkowo ikony obsługują dwie warstwy (pierwszy plan i tło), których można używać do poruszania się, aby zapewnić użytkownikom przyjemność wizualną.

Osoby wdrażające urządzenia udostępniają maskę urządzenia, która decyduje o kształcie wszystkich ikon na urządzeniu. Ta ikona będzie używana na wszystkich powierzchniach interfejsu użytkownika systemu, które korzystają z ikon programu uruchamiającego (np. programie uruchamiającym, przeglądzie, ustawieniach i arkuszu udostępniania).

Przykłady i źródło

Przykłady kodu:

  • platform/development/samples/AdaptiveIconSample/

Dokumentacja deweloperska:

Kod źródłowy:

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

Realizacja

Aby zmienić kształt ikony na platformie, nałóż jeden ciąg znaków w framework/base/core/res/res/values/config.xml w następujący sposób:

<!-- 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 i składnia ciągu są zgodne ze standardem W3, SVG dotyczącym definicji ścieżki . Ten format PathData jest również obsługiwany przez rysunki wektorowe w systemie Android.

Ścieżka ta powinna być wypukła i powinna respektować bezpieczną strefę (66/71 = 91%) w granicach widoku. Jest to egzekwowane w jednym z testów CTS.

Jeśli zdecydujesz się użyć koła jako maski platformy, pamiętaj o nałożeniu również config_useRoundIcon = true. Jeśli nie, ustaw tę wartość konfiguracyjną na false lub nie określaj tej wartości konfiguracyjnej.

Adaptacyjne API ikon

Poniżej przedstawiono API klasy 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();
    }

Implementacja referencyjna

Nie trzeba nic robić, aby wyrenderować statyczne ikony adaptacyjne na dowolnej powierzchni interfejsu użytkownika systemu. Gdy PackageManager zwróci rysunek, po prostu powiąż go z ImageView. W ten sposób ikony są już renderowane na platformach Pre-O.

Jeśli chodzi o renderowanie efektu dynamicznego ruchu, Launcher3 (platforma/pakiety/aplikacje/Launcher3) będzie miał implementację referencyjną pokazującą, jak osiągnąć efekt w O-MR1.

Walidacja

Aby sprawdzić poprawność implementacji, po zastąpieniu maski upodobań sprawdź, czy ikony są poprawnie renderowane w Launcherze3, Ustawieniach, Przeglądzie i Ustawieniach. Możesz także uruchomić pliki AdaptiveIconDrawableTest.java i AdaptiveIconMaskTest.java wewnątrz grafiki CTS TestCase, aby przetestować implementację.

Zalecany ręczny przypadek testowy można znaleźć pod adresem: platform/development/samples/AdaptiveIconSample/.

Znane problemy

Znane problemy obejmują:

  • Rozmazane ikony, w zależności od sposobu zdefiniowania ścieżki maski.
  • Powiększone ikony skrótów, jeśli twórcy aplikacji nie używają metody Icon.createWithAdaptiveBitmap() lub nie używają jej prawidłowo. Aby ta metoda działała prawidłowo, przekazana bitmapa powinna być uzupełniona o 25% ze wszystkich czterech stron.

Problemy te można rozwiązać w następujący sposób:

  • Maskę należy zdefiniować w układzie współrzędnych [0, 100] x [0, 100].
  • Upewnij się, że obrazy używane w ikonach adaptacyjnych (ikony programu uruchamiającego, skróty) mają wystarczające wypełnienie (25%) ze wszystkich czterech stron.