Pytanie Czy możemy używać VectorDrawable lub VectorXML jako ikon dla powiadomień push w systemie Android?


Używam obrazu PNG, ale jego rozmiar jest zbyt duży, więc muszę iść na kompromis z jego jakością. Więc myślałem, że wektory mogą być na odwrót? Przykład będzie świetną pomocą.


14
2017-12-01 08:45


pochodzenie


jeśli twój obraz PNG jest duży, to umieść go w folderze z rysunkami-xxhdpi i użyj go! - Madhur
Więc problem polega na tym, że rozmiar obrazu png jest duży dla ikony? możesz po prostu zmienić rozmiar na innym ekranie. Możesz użyć romannurik.github.io/AndroidAssetStudio. Pomoże Ci stworzyć ikonę dla różnych rozmiarów i gęstości. - Mohamad Damba Putrabangga
Zmieniłem rozmiar i umieściłem go w formacie drawable-xxhdpi, który był używany do tej pory, ale z powodu aktualizacji Lollipop musiałem stworzyć przezroczysty obraz i użyć go z kolorem tła, który jeszcze bardziej pogorszył jego jakość. więc czy w ogóle mogę tworzyć kolorowe drawablevector i używać go jako ikony? - Rajan Kadeval
Czy jest to "setSmallIcon (int)", "setLargeIcon (Bitmap)" lub "NotificationCompat.BigPictureStyle.bigPicture (Bitmap)"? Możliwe jest rastowanie VectorDrawable do Bitmapy przy użyciu DrawingCache. ... ale przyniosłoby to powrócić do kwestii rozmiaru, po prostu przeniesiony z czasu budowy do czasu pracy. Wciąż to obniży rozmiar pakietu APK, jeśli jest to twój cel. Możesz użyć rzeczywistego VectorDrawable dla "setSmallIcon (int)", ale będzie działać tylko na urządzeniach Lollipop lub wyższych (testowałem to na Galaxy S4), brakuje - obecnie - około 60% rynku: developer.android.com/about/dashboards/index.html - John


Odpowiedzi:


Czy możemy używać VectorDrawable lub VectorXML jako ikon dla powiadomień wypychanych?

Tak, po prostu wywołaj wektor losowania standardowym sposobem powiadomień:

.setSmallIcon(R.drawable.my_vector)

Aby użyć przezroczystości (ikony powiadomień są tylko białe i / lub przezroczyste), będziesz musiał użyć kanałów alfa, gdy ustawisz kolory w wektorze XML, co oznacza # 00000000 dla przezroczystych i #FFFFFFFF dla białych.


8
2018-05-17 13:20



Myślę, że działa to tylko dla API 21+, ponieważ użyłem powyższego, ale dostałem błąd lubię to dla urządzeń pre-Lollipop. Zobacz także to. - Farbod Salamat-Zadeh
@ FarbodSalamat-Zadeh Tak, musisz sprawdzić pakiet SDK użytkownika z warunkiem (jeśli (Build.VERSION.SDK_INT <Build.VERSION_CODES.LOLLIPOP)) - Yoann Hercouet


VectorDrawables będzie działał tylko jako ikony powiadomień dla wersji wyższych niż (lub równych) Android Lollipop - tzn. API 21.

Wiem to, ponieważ próbowałem użyć .setSmallIcon(R.drawable.my_vector) jak pokazano w jednej z pozostałych odpowiedzi tutaj i chociaż działa to idealnie dobrze dla API 21 i wyżej, otrzymałem następujący błąd dla wersji wcześniejszych niż Lollipop:

android.app.RemoteServiceException: Złe powiadomienie wysłane z pakietu com.example.app: Nie można utworzyć ikony: StatusBarIcon (pkg = com.example.appuser = 0 id = 0x7f02005a poziom = 0 widoczny = true num = 0)

Istnieją również inne odpowiedzi na Stack Overflow wspierające ten argument:


15
2017-09-08 03:38





Prawdopodobnie nie powinieneś używać ikon VectorDrawable w powiadomieniach, jeśli używasz pakietu do rysowania wektorowego - możesz napotkać błędy na urządzeniach pre-Lollipop.

Sprawdź to: Powiadomienie zgłasza błąd podczas używania wektorów

Warty wektor, pakiet do rysowania, nie natknąłem się na żadne błędy, ale po ich użyciu, urządzenia pre-lollipop nie były w stanie uzyskać dostępu do ikony wektorowej w momencie powiadomienia i wyrzuciły ten błąd:

android.app.RemoteServiceException: Wysłano nieprawidłowe powiadomienie   package com.xxx.xxx: Nie można utworzyć ikony:   StatusBarIcon (pkg = com.xxx.xxxuser = 0 id = 0x7f020082 poziom = 0 widoczny = true   num = 0)


0
2017-09-07 03:28





Dla wersji <21,

Jeśli chcesz bezpośrednio przekazać identyfikator wektora do pobierania w setSmallIcon (): Nie ma mowy.

Dla setLargeIcon () pośrednio, tak. Posługiwać się

VectorDrawableCompat drawable = VectorDrawableCompat.create(context.getResources(), resource id, theme);

następnie utwórz Bitmapę z tego losowania i przejdź do niej setLargeIcon ()


0
2018-02-15 09:13