Resources.getColor(int id)
Metoda została zaniechana.
@ColorInt
@Deprecated
public int getColor(@ColorRes int id) throws NotFoundException {
return getColor(id, null);
}
Co powinienem zrobić?
Resources.getColor(int id)
Metoda została zaniechana.
@ColorInt
@Deprecated
public int getColor(@ColorRes int id) throws NotFoundException {
return getColor(id, null);
}
Co powinienem zrobić?
Odpowiedzi:
Począwszy od Androida Wsparcia Biblioteki 23,
nowy GetColor () metoda został dodany do
ContextCompat
.Jego opis z oficjalnego JavaDoc:
Więc po prostu zadzwoń :
Możesz sprawdzić
ContextCompat.getColor()
kod źródłowy na GitHub .źródło
tl; dr:
Wyjaśnienie:
Będziesz musiał użyć ContextCompat.getColor () , który jest częścią biblioteki Support V4 (będzie działać dla wszystkich poprzednich interfejsów API).
Jeśli jeszcze nie korzystasz z biblioteki wsparcia, musisz dodać następujący wiersz do
dependencies
tablicy w aplikacjibuild.gradle
(uwaga: jest to opcjonalne, jeśli już korzystasz z biblioteki appcompat (V7) ):Jeśli zależy Ci na motywach, dokumentacja określa, że:
źródło
M
, zwrócony kolor będzie stylizowany na temat określonego kontekstu w. ”ContextCompat
klasa pochodzi z SupportV4. AppcompatV7 również działa, ponieważ opiera się na SupportV4. Jak mówią w dokumentacji biblioteki Pomoc ,This library depends on the v4 Support Library. If you are using Ant or Eclipse, make sure you include the v4 Support Library as part of this library's classpath.
. Dlatego nie ma sensu udzielaćAppcompatV7
odpowiedzi.Nie chcę dołączać biblioteki wsparcia tylko dla getColor , więc używam czegoś takiego
Myślę, że kod powinien działać dobrze, a przestarzałe
getColor
nie może zniknąć z API <23.I tego właśnie używam w Kotlinie:
źródło
W systemie Android Marshmallow wiele metod jest przestarzałych.
Na przykład, aby uzyskać kolor
Również, aby uzyskać możliwość rysowania
źródło
Dla wszystkich użytkowników Kotlin:
źródło
val color = ContextCompat.getColor(context, R.color.colorPrimary)
. Zmienna „it” może być dowolna, ale musi być kontekstem .it
jest w tym przypadkucontext
, ponieważ używamcontext?.let {
do sprawdzenia, czycontext
nie jest zerowa. FunkcjagetColor()
akceptuje tylko kontekst inny niż null. Przeczytaj więcej o tymlet
i jak z niego korzystać: kotlinlang.org/docs/reference/scope-functions.html#letW swoim urządzeniu do recyklingu Zobacz w Kotlin
źródło
Skorzystaj z
getColor(Resources, int, Theme)
metody zResourcesCompat
Biblioteki pomocy technicznej Androida.Myślę, że lepiej odzwierciedlić swoje pytanie niż
getColor(Context, int)
zContextCompat
skoro pytasz oResources
. Przed wersją interfejsu API poziomu 23 motyw nie zostanie zastosowany, a metoda wywoła funkcję,getColor(int)
ale nie będzie już przestarzałe ostrzeżenie. Temat może być równieżnull
.źródło
Jeśli niekoniecznie potrzebujesz zasobów, użyj
parseColor(String)
:Color.parseColor("#cc0066")
źródło
Jeśli twój obecny min. Poziom interfejsu API to 23, możesz po prostu używać
getColor()
tak, jak my, aby uzyskać zasoby ciągów przezgetString()
:Możesz ograniczyć poziomy API poniżej 23:
ale dla uproszczenia możesz zrobić jak poniżej, jako zaakceptowaną odpowiedź:
Z zasobów .
Z ContextCompat AndroidX .
Z obsługi ContextCompat
źródło
Sfrustrowałem się też. Moja potrzeba była bardzo prosta. Wszystko czego chciałem to kolor ARGB z zasobów, więc napisałem prostą metodę statyczną.
źródło