Ikona paska powiadomień zmienia kolor na biały w systemie Android 5 Lollipop

207

Mam aplikację wyświetlającą niestandardowe powiadomienia. Problem polega na tym, że w systemie Android 5 mała ikona na pasku powiadomień jest wyświetlana na biało. Jak mogę to naprawić?

Alejandro Casanova
źródło
Rahul Sharma i Basiam mają lepszą odpowiedź tutaj - stackoverflow.com/questions/30795431/...
Rivu Chakraborty
Zdarza mi się to, gdy mam system Android 6, a nie 5.
Jaime Montoya,
Jasne, dzieje się tak z Androidem 5+, oczywiście także w Androidzie 6 i 7. Do czasu pytania Android 5 był najnowszą wersją, a funkcja powodująca ten problem została wprowadzona w Androidzie 5.
Alejandro Casanova
Myślę, że dokładniej jest powiedzieć API 21 poziom (Android 5.0), API poziom 22 (Android 5.1), API poziom 23 (Android 6.0) itp. Termin „Android 5” jest niejednoznaczny, ponieważ możesz mówić o systemie Android 5.0 lub Android 5.1, a kiedy testuję powiadomienia i sposób wyświetlania ikon w interfejsie API poziomu 22 vs. Poziom API 23, zdałem sobie sprawę, że zachowują się inaczej.
Jaime Montoya,

Odpowiedzi:

269

Przyjęta odpowiedź nie jest (całkowicie) poprawna. Jasne, sprawia, że ​​ikony powiadomień są wyświetlane w kolorze, ale robi to z WIELKĄ wadą - ustawiając docelowy zestaw SDK na niższy niż Android Lollipop!

Jeśli rozwiążesz problem z białą ikoną, ustawiając docelowy zestaw SDK na 20, zgodnie z sugestią, twoja aplikacja nie będzie atakować Androida Lollipop, co oznacza, że ​​nie możesz używać funkcji specyficznych dla Lollipop.

Spójrz na http://developer.android.com/design/style/iconography.html , a zobaczysz, że biały styl to sposób wyświetlania powiadomień w Android Lollipop.

W Lollipop Google sugeruje również użycie koloru, który będzie wyświetlany za (białą) ikoną powiadomienia - https://developer.android.com/about/versions/android-5.0-changes.html

Myślę więc, że lepszym rozwiązaniem jest dodanie ikony sylwetki do aplikacji i użycie jej, jeśli urządzenie ma system Android Lollipop.

Na przykład:

Notification notification = new Notification.Builder(context)
            .setAutoCancel(true)
            .setContentTitle("My notification")
            .setContentText("Look, white in Lollipop, else color!")
            .setSmallIcon(getNotificationIcon())
            .build();

    return notification;

I w metodzie getNotificationIcon:

private int getNotificationIcon() {
    boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
    return useWhiteIcon ? R.drawable.icon_silhouette : R.drawable.ic_launcher;
}
Daniel Saidi
źródło
34
Jak wygenerować sylwetkę? Jestem programistą bez umiejętności Photoshopa, a przezroczystość tła za pomocą narzędzi online wciąż powoduje wyświetlanie białych ikon.
Chaitanya
6
@Chaitanya Użyj GIMP :)
ByteHamster
4
to rozwiązanie nie odpowiada na pytanie, dlaczego proces kompilacji Androida modyfikuje doskonale poprawny PNG, kompresuje go i usuwa kanał alfa.
philk
6
developer.android.com/design/style/iconography.html prowadzi do material.google.com/style/icons.html i kiedy naciśnięcie ctrl+fi wpisując notificationna tej stronie nie można znaleźć niczego ...
user25
4
zamiast sprawdzania z modyfikatora wersji platformy kodowej aplikacji do foldera do rysowania - drawable / drawable-v21 i umieszczania właściwej ikony
Igor Wojda
72

Całkowicie zgadzam się z użytkownikiem Danielem Saidi. Aby mieć Colordla NotificationIconPiszę tę odpowiedź.

W tym celu musisz zrobić ikonę podobną Silhouettei zrobić sekcję Transparentgdziekolwiek chcesz dodać swoją Colors. to znaczy,

wprowadź opis zdjęcia tutaj

Możesz dodać swój kolor za pomocą

.setColor(your_color_resource_here)

UWAGA: setColorjest dostępna tylko w, Lollipopwięc musisz sprawdzićOSVersion

if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    Notification notification = new Notification.Builder(context)
    ...
} else {
    // Lollipop specific setColor method goes here.
    Notification notification = new Notification.Builder(context)
    ...
    notification.setColor(your_color)
    ...            
}

Możesz to również osiągnąć, używając Lollipopjako celu SDK.

Wszystkie instrukcje dotyczące NotificationIconpodane w wierszach Przewodnika powiadomień Google Developer Console .

Preferowana ikona powiadomienia Rozmiar 24x24dp

mdpi    @ 24.00dp   = 24.00px
hdpi    @ 24.00dp   = 36.00px
xhdpi   @ 24.00dp   = 48.00px

Aby uzyskać więcej informacji, zapoznaj się z tym linkiem dla rozmiarów ikon powiadomień .

Jaydipsinh Zala
źródło
4
jest to bardzo dobry pomysł na ustawienie koloru tła jako powiadomienia. setColor (your_color_resource_here)
TejaDroid
1
Więc próbowałem tego, a ikona powiadomienia ma kolorowe tło, kiedy ściągam cień powiadomienia. Ale na samej tacy wciąż jest biała ikona
Stealth Rabbi
1
to rozwiązanie jest słuszne… ma ikonę powiadomienia z przezroczystym tyłem… i ze względu na sylwetkę ikona nie musi być tylko czarna… ikona może mieć kolory; to po prostu, że Android L przekonwertuje kolor pokazu jako biały .. a poprzednie wersje Androida pokażą ikonę taką, jaka jest
Lakshay
dodaję setColor dla poniżej Lollipopa z ikoną ic_launcher w porządku, ale w wersji 6.0 z białą ikoną kwadratu proszę o pomoc
Harsha
Testowałem setColorna Kitkat (API 19) i IceCreamSandwich (API 15), w obu przypadkach zignorował kolor, ale nie zawiesił się . Czy mogę bezpiecznie pominąć sprawdzanie wersji systemu operacyjnego?
Maria,
47

Oto kod, którego używa Android do wyświetlania ikon powiadomień:

// android_frameworks_base/packages/SystemUI/src/com/android/systemui/
//   statusbar/BaseStatusBar.java

if (entry.targetSdk >= Build.VERSION_CODES.LOLLIPOP) {
    entry.icon.setColorFilter(mContext.getResources().getColor(android.R.color.white));
} else {
    entry.icon.setColorFilter(null);
}

Musisz więc ustawić docelową wersję SDK na coś, <21a ikony pozostaną kolorowe. Jest to brzydkie obejście, ale działa zgodnie z oczekiwaniami. W każdym razie proponuję przestrzegać Wytycznych projektowych Google : „Ikony powiadomień muszą być całkowicie białe”.

Oto jak możesz to zaimplementować:

Jeśli używasz Gradle / Android Studio do tworzenia aplikacji, użyj build.gradle:

defaultConfig {
    targetSdkVersion 20
}

W przeciwnym razie (Eclipse itp.) Użyj AndroidManifest.xml:

<uses-sdk android:minSdkVersion="..." android:targetSdkVersion="20" />
ByteHamster
źródło
Czy istnieje jakieś obejście? Lub co mogę zrobić, aby poprawnie wyświetlić tę lub inną ikonę?
Alejandro Casanova
Zredagowałem swoją odpowiedź, ponieważ znalazłem obejście po przeczytaniu kodu źródłowego Androida.
ByteHamster
4
Wielkie dzięki za pomoc, ale proszę cię, zapewnij mi trochę „kontekstu”. Gdzie muszę to zrobić? Co to jest „wejście”?
Alejandro Casanova
Kod został pobrany z AOSP tylko po to, aby pokazać, jak znalazłem obejście :) Dodałem małe wyjaśnienie, jak to zaimplementować.
ByteHamster
To faktycznie działa. Zgadłeś, dlaczego Google to zrobił? Czy to błąd, czy funkcja?
m02ph3u5
24

Aby uniknąć zmiany koloru ikon powiadomień na białe, użyj dla nich ikon „Sylwetka”, tj. białe tło przezroczyste. Możesz użyć Irfanview do ich zbudowania:

  • wybierz zdjęcie, otwórz w IrfanView, naciśnij F12 dla narzędzi do malowania, w razie potrzeby wyczyść obraz (usuń niechciane części, wygładź i wypoleruj)
  • Image / Decrease Color Depth do 2 (dla obrazu czarno-białego)
  • Image / Negative (dla obrazu czarno-białego)
  • Image / Resize/Resample do 144 x 144 (użyj metody rozmiaru „Zmień rozmiar”, a nie „Zmień próbkę”, w przeciwnym razie obraz zostanie ponownie zwiększony do 24 bitów koloru na piksel (24 BPP)
  • File / Save as PNG, zaznacz Show option dialog, zaznacz Save Transparent Color, kliknij Save, a następnie kliknij czarny kolor na obrazie, aby ustawić kolor przezroczysty

Wygląda na to, że Android używa tylko rozdzielczości obrazu do rysowania xxhdpi (144 x 144), więc skopiuj ic_notification.pngplik wynikowy do \AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi. Użyj .setSmallIcon(R.drawable.ic_notification)w swoim kodzie lub użyj, getNotificationIcon()jak sugerował powyżej Daniel Saidi.

Możesz także użyć Android Asset Studio Romana Nurika .

Thomas H. Schmidt
źródło
Próbowałem przekonwertować swoją ikonę za pomocą Photoshopa, ale nie udało mi się, ale będąc fanem irfanview, szybko to wypróbowałem, kiedy to zobaczyłem i zadziałało cudownie. Dzięki!
Bruce
15

Inną opcją jest skorzystanie z rysowanych katalogów (mipmap) specyficznych dla wersji, aby dostarczyć inną grafikę dla Lollipop i wyższych.

W mojej aplikacji katalogi „v21” zawierają ikony z przezroczystym tekstem, podczas gdy inne katalogi zawierają wersję nieprzezroczystą (dla wersji Androida starszych niż Lollipop).

System plików

Który powinien wyglądać mniej więcej tak:

Android Studio

W ten sposób nie musisz sprawdzać numerów wersji w kodzie, np

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.mipmap.ic_notification)
        .setContentTitle(title)
        .setContentText(message)
        .setAutoCancel(true)
        .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

Podobnie możesz odwoływać się do „ic_notification” (lub jakkolwiek chcesz to nazwać) w ładunku GCM, jeśli użyjesz atrybutu „icon”.

https://developers.google.com/cloud-messaging/http-server-ref#notification-payload-support

Ian
źródło
3
To działa i wygląda jak najbardziej rozwiązanie dla Androida.
Siergiej Galin
czy mówisz, że jeśli Android wybierze ikonę z folderu mipmap-21, jeśli wersja ma Lollipop, a jeśli mniej niż Lollipop wybierze z Drawable?
Lakshay,
@Ian, podejście do katalogów jest dobre dla zasobów dla wersji Androida, ale jak możesz ustawić setColor(bez dodatkowego kodu) w ten sposób?
Daniel
Kolory @Daniel mogą również znajdować się w katalogach specyficznych dla wersji, np. „Wartości” i „wartości-v21”.
Ian
12

Zgodnie z wytycznymi projektowymi Androida musisz użyć sylwetki. builder.setSmallIcon(R.drawable.some_notification_icon);Ale jeśli nadal chcesz wyświetlać kolorową ikonę jako ikonę powiadomienia, oto sztuczka dla Lollipopa i powyżej użyj poniższego kodu. LargeIcon będzie działać jako główna ikona powiadomienia, a także musisz podać sylwetkę smallIcon, ponieważ będzie ona wyświetlana w prawym dolnym rogu dużegoIcon.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
     builder.setColor(context.getResources().getColor(R.color.red));
     builder.setSmallIcon(R.drawable.some_notification_icon);
     builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher));
}

I tylko do użytku przed Lollipopem .setSmallIcon(R.mipmap.ic_launcher) z twoim konstruktorem.

Muhammad Babar
źródło
11

Teraz studio Android udostępnia wtyczkę Image Asset , która będzie generować ikonę we wszystkich wymaganych folderach drawbale

Zasób obrazu Studio pomaga tworzyć różne typy ikon o różnych gęstościach i pokazuje dokładnie, gdzie zostaną umieszczone w twoim projekcie. Zawiera narzędzia do dostosowywania ikon i dodawania tła, a wszystko to podczas wyświetlania wyniku w okienku podglądu, dzięki czemu wyglądają dokładnie tak, jak zamierzałeś. Narzędzia te mogą znacznie usprawnić proces projektowania i importowania ikon.

Możesz uzyskać dostęp do Zasobu obrazu , klikając nowy> kliknij opcję Zasób obrazu, a pojawi się następujące okno: -

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Nishchal
źródło
8

Napotkałem ten sam problem i to dlatego, że ikona powiadomienia mojej aplikacji nie była płaska. W przypadku wersji Androida Lollipop lub nawet poniżej Lollipop ikona powiadomienia aplikacji powinna być płaska, nie należy używać ikony z cieniami itp.

Poniżej znajduje się kod, który działał idealnie we wszystkich wersjach Androida.

private void sendNotification(String msg) {

    NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent intent = new Intent(this, CheckOutActivity.class);

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this).setSmallIcon(R.drawable.ic_notification)
            .setContentTitle(getString(R.string.app_name))
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setContentText(msg).setLights(Color.GREEN, 300, 300)
            .setVibrate(new long[] { 100, 250 })
            .setDefaults(Notification.DEFAULT_SOUND).setAutoCancel(true);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(new Random().nextInt(), mBuilder.build());
}

Zła ikona
wprowadź opis zdjęcia tutaj

Prawa ikona

wprowadź opis zdjęcia tutaj

Nauman Zubair
źródło
1
Gdzie dokładnie rozwiązujesz problem?
IgorGanapolsky
Jak stworzyć właściwą ikonę. Czy można wygenerować online? jakieś narzędzie?
Jiks
@Jiks Tak, tutaj jest link
Muhammad Sohaib Ayub,
7

kanał alfa to jedyne dane obrazu używanego przez system Android do ikon powiadomień:

  • alpha == 1: piksele pokazują biel
  • alpha == 0: piksele są wyświetlane jako wybrany kolor Notification.Builder#setColor(int)

Wspomniano o tym na stronie https://developer.android.com/about/versions/android-5.0-changes.html :

System ignoruje wszystkie kanały inne niż alfa w ikonach akcji i głównej ikonie powiadomienia. Powinieneś założyć, że te ikony będą tylko alfa.

Prawie wszystkie wbudowane rysunki wydają się być odpowiednimi obrazami alfa do tego celu, więc możesz użyć czegoś takiego:

Notification.Builder.setColor(Color.RED)
                    .setSmallIcon(android.R.drawable.star_on)

ale wciąż szukam dokumentu API, który oficjalnie to potwierdza.

Testowane na Androidzie 22.

Ciro Santilli
źródło
Testowałem setColorna Kitkat (API 19) i IceCreamSandwich (API 15), w obu przypadkach zignorował kolor, ale nie zawiesił się . Czy mogę bezpiecznie pominąć sprawdzanie wersji systemu operacyjnego?
Maria,
@JohnLee Nie sądzę, że może się zawiesić, może wyglądać źle, jeśli nie weźmiesz go pod uwagę :-)
Ciro Santilli 8 冠状 病 六四 事件 法轮功
3

usuń android:targetSdkVersion="21"plik manifest.xml. to będzie działać! i z tego nie ma żadnego problemu w twojej aplikacji, to tylko sztuczka, którą stosuję i znalazłem kolorową ikonę w powiadomieniu

Bhanu Sharma
źródło
9
Całkowicie zły pomysł, aby grać w „sztuczki” z systemem! Nie rozwiązanie!
sud007
3

Powiadomienia są w skali szarości jak wyjaśniono poniżej. Nie są czarno-białe, pomimo tego, co napisali inni. Prawdopodobnie widziałeś ikony z wieloma odcieniami, takie jak paski siły sieci.

Przed API 21 (Lollipop 5.0) kolorowe ikony działały. Możesz wymusić na aplikacji celowanie w API 20, ale to ogranicza funkcje dostępne dla twojej aplikacji, więc nie jest to zalecane. Możesz przetestować działający poziom interfejsu API i odpowiednio ustawić ikonę koloru lub ikonę skali szarości, ale prawdopodobnie nie jest to opłacalne. W większości przypadków najlepiej jest użyć ikony w skali szarości.

Obrazy mają cztery kanały, RGBA (czerwony / zielony / niebieski / alfa). W przypadku ikon powiadomień system Android ignoruje kanały R, G i B. Jedyny kanał, który się liczy, to Alpha, znana również jako krycie. Zaprojektuj swoją ikonę za pomocą edytora, który daje kontrolę nad wartością alfa kolorów rysowania.

Jak wartości alfa generują obraz w skali szarości:

  • Alfa = 0 (przezroczysty) - te piksele są przezroczyste, pokazując kolor tła.
  • Alpha = 255 (nieprzezroczysty) - te piksele są białe.
  • Alfa = 1 ... 254 - Te piksele są dokładnie tym, czego można się spodziewać, zapewniając odcienie między przezroczystym a białym.

Zmieniając to za pomocą setColor:

  • Zadzwoń NotificationCompat.Builder.setColor(int argb). Z dokumentacji dla Notification.color:

    Kolor akcentu (liczba całkowita ARGB, taka jak stałe w kolorze), która ma być stosowana przez standardowe szablony stylu podczas prezentacji tego powiadomienia. Obecny projekt szablonu tworzy kolorowy obraz nagłówka, nakładając obraz ikony (oznaczony kolorem białym) na pole tego koloru. Składniki alfa są ignorowane.

    Moje testy z setColor pokazują, że komponenty Alpha nie są ignorowane; zamiast tego nadal zapewniają skalę szarości. Wyższe wartości alfa powodują, że piksel staje się biały. Niższe wartości alfa zmieniają piksel na kolor tła (czarny na moim urządzeniu) w obszarze powiadomień lub na określony kolor w rozwijanym powiadomieniu. (Wygląda na to, że inni zgłaszali nieco inne zachowanie, więc bądź świadomy!)

Jeremy Frank
źródło
2

Po wydaniu Androida Lollipop Android zmienił wytyczne dotyczące wyświetlania ikon powiadomień na pasku powiadomień. Oficjalna dokumentacja mówi: „Zaktualizuj lub usuń zasoby, które wymagają koloru. System ignoruje wszystkie kanały inne niż alfa w ikonach akcji i w głównej ikonie powiadomienia. Należy założyć, że te ikony będą tylko alfa. System rysuje ikony powiadomień w kolorze białym i ikony akcji w kolorze ciemnoszarym ”. To, co oznacza to w kategoriach laików, to „Konwertuj wszystkie części obrazu, których nie chcesz wyświetlać, na przezroczyste piksele. Wszystkie kolory i nieprzezroczyste piksele są wyświetlane w kolorze białym ”

Możesz zobaczyć, jak to zrobić szczegółowo za pomocą zrzutów ekranu tutaj https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/

Mam nadzieję, że to pomaga

Rohit Khanna
źródło
2

Musisz zaimportować jednokolorowy przezroczysty obraz PNG. Możesz więc ustawić kolor ikony małej ikony. W przeciwnym razie będzie wyświetlany w kolorze białym w niektórych urządzeniach, takich jak MOTO

abhi.nalavade
źródło
1

Jeśli korzystasz z GoogleFireBaseMessaging, możesz ustawić „id ikony” w ładunku „powiadomienia” (pomaga mi to rozwiązać problem z ikoną białego paska):

{
    "to":"<fb_id>",
    "priority" : "high",
    "notification" : 
    {
        "title" : "title",
        "body" : "body" ,
        "sound" : "default",
        "icon" : "ic_notification"
    }
}

ustaw ic_notification na swój własny identyfikator z R.drawable.

Maxim Firsoff
źródło
Gdzie umieściłeś tę ikonę? Dostaję tylko ikonę mojej aplikacji, a wszystkie pliki R.drawable, które znajduję, są plikami klasy binarnej.
shinzou,
@kuhaku odnosi się do pliku ic_launcher.png w folderze „drawable”.
Johnson
0

Ja też napotkałem zbyt wiele problemów, ale po przeszukaniu Internetu znalazłem różne rozwiązania tego problemu. Pozwól, że podsumuję wszystkie rozwiązania i wyjaśnię:

Uwaga: To rozwiązanie jest przeznaczone dla użytkowników Cordon firmy Phonegap

  1. Przykład

<preference name="android-targetSdkVersion" value="20"/>

Musisz ustawić wartość Androida-targetSdkVersion na mniejszą niż 21. Tak więc po ustawieniu tej wartości Obraz ikony powiadomienia pojawi się do Androida 6 (Marshmallow), nie będzie działał w Androidzie 7 (Nougat). To rozwiązanie działało dla mnie.

  1. Zmień statusbarStyle w pliku konfiguracyjnym. Przykład

<preference name="StatusBarStyle" value="lightcontent" />

Ale to rozwiązanie będzie działać tylko po otwarciu aplikacji. Myślę, że to rozwiązanie nie jest najlepszym rozwiązaniem, ale działało dla wielu użytkowników.

  1. Uczyń swoją ikonę przezroczystą. To rozwiązanie działało dla wielu osób. W rzeczywistości chodzi o to, że przy opracowywaniu aplikacji natywnej musimy zapewnić im trzy obrazy: (a) Ikona aplikacji (b) Ikona powiadomienia (c) Obraz ikony paska stanu, ale w przypadku tworzenia aplikacji mobilnych Hybrid nie ma opcji Zrób tak. Uczyń swoją ikonę przezroczystą, a to rozwiązanie rozwiąże Twój problem.

Jestem pewien, że jedno z powyższych rozwiązań zadziała w przypadku Twojego problemu.

Rinku Kumar
źródło
0

FYI: Jeśli ikona nie pojawi się, upewnij się, że lokalna lub zdalna konfiguracja powiadomień zawiera prawidłową nazwę ikony, tj

'largeIcon' => 'ic_launcher',
'smallIcon' => 'ic_launcher' // defaults to ic_launcher, 
phil
źródło
0

Myślę, że jest za późno, aby mówić o API 21, ale znalazłem łatwy sposób.

Podczas korzystania z „Powiadomień niestandardowych (układ niestandardowy)”

RemoteView's

setImageViewResource(int viewId, int srcId);

i

setImageViewUri(int viewId, Uri uri); 

sprawia, że ​​te obrazy są białe na Lollipop (API 21).

Ale podczas używania

setImageViewBitmap(int viewId, Bitmap bitmap);

Obraz nie zostaje zamaskowany na biało!

Ciasto Limonkowe
źródło
-3

zmieszaj te dwie rzeczy w aplikacji

 defaultConfig {
    applicationId "com.example.abdulwahidvi.notificationproblem"
    minSdkVersion 16
    //This is the version that was added by project by default
    targetSdkVersion 26 <------ default
    // Changed it to version 20
    targetSdkVersion 20 <------ mine

    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
wahid
źródło
-38

android:targetSdkVersion="20"powinno być < 21.

Hemanth Dvshkk
źródło
1
Nie postępuj zgodnie z tym rozwiązaniem, na pewno może działać, ale kosztem uruchamiania aplikacji w trybie zgodności dla nowszych wersji Androida.
king_below_my_lord