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.