Z nowym Android API API 22 getResources().getDrawable()
jest już przestarzałe. Teraz najlepszym rozwiązaniem jest użycie tylko getDrawable()
.
Co się zmieniło?
Z nowym Android API API 22 getResources().getDrawable()
jest już przestarzałe. Teraz najlepszym rozwiązaniem jest użycie tylko getDrawable()
.
Co się zmieniło?
getDrawable (int id)
klasyResources
jest przestarzała. Powinieneś teraz użyć metodygetDrawable (int id, Resources.Theme theme)
z nowym parametrem kompozycji.Resources#getDrawable(int)
iResources#getColor(int)
były przestarzałe.Odpowiedzi:
Masz kilka opcji, aby poradzić sobie z tą amortyzacją we właściwy (i przyszły ) sposób, w zależności od tego, jaki ładunek rysujesz ładujesz:
A) Drawables z atrybutami motywu
Otrzymasz styl Drawable zgodnie z instrukcją motywu aktywności. To prawdopodobnie potrzebujesz.
B) Drawable bez atrybutów motywu
Będziesz mógł wyciągać swój niestylowany styl po staremu. Uwaga: nie
ResourcesCompat.getDrawable()
jest przestarzałe!EXTRA) drawables z atrybutami motywu z innego motywu
źródło
Edycja: zobacz mój post na blogu na ten temat, aby uzyskać pełniejsze wyjaśnienie
Zamiast tego należy użyć następującego kodu z biblioteki wsparcia:
Użycie tej metody jest równoważne z wywołaniem:
Począwszy od interfejsu API 21, należy
getDrawable(int, Theme)
zamiast tego użyć metodygetDrawable(int)
, ponieważ pozwala ona pobrać obiekt do rysowania powiązany z określonym identyfikatorem zasobu dla danej gęstości ekranu / motywu. Wywołanie przestarzałejgetDrawable(int)
metody jest równoważne z wywołaniemgetDrawable(int, null)
.źródło
getDrawable (int id)
metodyContext
klasy. Jest to to samo, cogetResources().getDrawable(id, getTheme());
nowy interfejs API.getDrawable(int, Resources.Theme)
.Zamień ten wiersz:
getResources().getDrawable(R.drawable.your_drawable)
z
ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
EDYTOWAĆ
ResourcesCompat
jest teraz przestarzałe. Ale możesz użyć tego:ContextCompat.getDrawable(this, R.drawable.your_drawable)
(Tutajthis
kontekst)Aby uzyskać więcej informacji, kliknij ten link: ContextCompat
źródło
ResourcesCompat
jest napisane, że jest przestarzałe. Powinno działać dobrze.getResources().getDrawable()
był przestarzały na poziomie API 22. Teraz musimy dodać motyw:getDrawable (int id, motyw Resources.Theme) (Dodano w interfejsie API na poziomie 21)
To jest przykład:
Oto przykład sprawdzania poprawności dla późniejszych wersji:
źródło
Build.VERSION_CODES.LOLLIPOP is API 21
, więc nie powinno to byćif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
lubif (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
? Nieważne. Od dołu „Metoda została dodana w API 21, ale nie była przestarzała aż do API 22. :)”Możesz użyć
to dla mnie praca
źródło
To tylko przykład, jak naprawiłem problem w tablicy, aby załadować listView, mam nadzieję, że to pomoże.
źródło
Spróbuj tego:
źródło
Jeśli celujesz w SDK> 21 (Lollipop lub 5.0), użyj
Zobacz dokumenty
źródło
getDrawable (int drawable) jest nieaktualny na poziomie API 22. W celach informacyjnych patrz ten link .
Teraz, aby rozwiązać ten problem, musimy przekazać nowy konstruktor wraz z identyfikatorem, takim jak: -
Dla rozwiązań Wykonaj następujące czynności: -
W Javie: -
lub
W Kotlinie: -
lub
Mam nadzieję, że to ci pomoże.
źródło
en api poziom 14
źródło
Teraz musisz wdrożyć w ten sposób
Wystarczy jeden wiersz kodu, wszystko zajmie się ContextCompat.getDrawable
źródło
Dla niektórych, którzy wciąż rozwiązują ten problem, nawet po zastosowaniu sugestii tego wątku (kiedyś taki byłem), dodaj ten wiersz do klasy aplikacji, metoda onCreate ()
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
Jak sugerowano tu i tutaj, czasami jest to wymagane, aby uzyskać dostęp do wektorów z zasobów, szczególnie gdy masz do czynienia z elementami menu itp
źródło
W Kotlin możesz użyć rozszerzenia
następnie użyj like
źródło
Build.VERSION_CODES.LOLLIPOP należy teraz zmienić na BuildVersionCodes.Lollipop, tj .:
źródło
BuildVersionCodes
klasa nie jest specyficzna dla Xamarin?