Wdrażanie ikon adaptacyjnych

Ikony adaptacyjne zachowują spójny kształt na urządzeniu, ale różnią się w zależności od urządzenia tylko z jedną ikoną dostarczoną przez dewelopera. Dodatkowo ikony obsługują dwie warstwy (pierwszy plan i tło), które mogą być używane do animacji: które zapewniają użytkownikom przyjemność wizualną.

Implementacje urządzeń udostępniają maskę urządzenia, która decyduje o kształcie wszystkich ikon urządzenia. Ta ikona będzie używana na wszystkich platformach interfejsu systemu, w których są używane ikony programu uruchamiającego (np. program uruchamiający, przegląd, ustawienia i arkusz udostępniania).

Przykłady i źródło

Przykłady kodu:

  • platform/development/samples/AdaptiveIconSample/

Dokumentacja dla deweloperów:

Kod źródłowy:

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

Implementacja

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 znaków są zgodne ze standardem W3 i SVG dla ścieżki. . Ten format danych PathData to elementy, które można rysować wektorach wektorowych Androida z całego świata.

Ta ścieżka powinna być wypukła i uwzględniać bezpieczną strefę (66/71 = 91%) w obrębie do granic widoku. Jest to egzekwowane w jednym z testów CTS.

Jeśli chcesz wykorzystać okrąg jako maskę platformy, pamiętaj, by nałożyć też config_useRoundIcon = true Jeśli nie, ustaw tę wartość konfiguracji na fałsz albo nie określ tę wartość konfiguracji.

Interfejs Adaptive Icon API

Interfejs API klasy AdaptiveIconDrawable pokazano poniżej:

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 musisz nic robić, aby renderować statyczne ikony adaptacyjne w żadnej Powierzchnie interfejsu systemu. Gdy PackageManager zwraca obiekt rysowalny, po prostu powiąż go z elementem obiekt ImageView Tak są już renderowane ikony na platformach przedpremierowych.

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

Weryfikacja

Aby sprawdzić implementację, po zastąpieniu maski zgodnie z ich preferencjami zapoznaj się z czy ikony są renderowane poprawnie w Menu z aplikacjami3, w Ustawieniach, Przegląd i Ustawieniach. Możesz też uruchomić pliki AdaptiveIconDrawableTest.java i AdaptiveIconMaskTest.java. wewnątrz elementu graficznego CTS TestCase, aby przetestować implementację.

Zalecany ręczny przypadek testowy znajdziesz tutaj: platform/programowanie/samples/AdaptiveIconSample/.

Znane problemy

Znane problemy to między innymi:

  • rozmytych ikon w zależności od tego, jak zdefiniowana jest ścieżka maski.
  • Powiększone ikony skrótów, jeśli deweloperzy aplikacji nie używają Icon.createWithAdaptiveBitmap() lub nie używaj tej metody bez obaw. Aby ta metoda działała prawidłowo, przekazywana w bitmapie powinna być Wyściełana w 25% z każdej strony.

Oto kilka możliwych rozwiązań tych problemów:

  • Maska powinna być zdefiniowana w układzie współrzędnych [0, 100] x [0, 100].
  • Upewnij się, że obrazy używane jako ikony adaptacyjne (ikony programu uruchamiającego , skróty) mieć wystarczające dopełnienie (25%) ze wszystkich czterech stron.