getColor (int id) deprecated on Android 6.0 Marshmallow (API 23)
Metoda Resources.getColor(int id)
została wycofana.
@ColorInt
@Deprecated
public int getColor(@ColorRes int id) throws NotFoundException {
return getColor(id, null);
}
Co mam zrobić? 12 answers
Począwszy od Android Support Library 23,
nowa metoda getColor () została dodana do ContextCompat
.
Jego opis z oficjalnego JavaDoc:
Zwraca kolor powiązany z określonym identyfikatorem zasobu
Począwszy od M, zwracany kolor będzie stylizowany dla określonego motywu kontekstu.
Po Prostu zadzwoń :
ContextCompat.getColor(context, R.color.your_color);
Możesz sprawdzić ContextCompat.getColor()
kod źródłowy na GitHub .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
Tl; dr:
ContextCompat.getColor(context, R.color.my_color)
Wyjaśnienie:
Będziesz musiał użyć ContextCompat.getColor () , która jest częścią biblioteki Support V4 (będzie działać dla wszystkich poprzednich API).
ContextCompat.getColor(context, R.color.my_color)
Jeśli nie używasz jeszcze biblioteki wsparcia, musisz dodać następującą linię do tablicy dependencies
wewnątrz aplikacji build.gradle
(Uwaga: jest to opcjonalne, jeśli używasz już biblioteki appcompat (V7) ):
compile 'com.android.support:support-v4:23.0.0' # or any version above
Jeśli zależy ci na tematach, dokumentacja określa że:
Począwszy od M, zwracany kolor będzie stylizowany na określony Temat kontekstu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-12 05:25:46
Nie chcę dołączać biblioteki wsparcia tylko dla getColor , więc używam czegoś w rodzaju
public static int getColorWrapper(Context context, int id) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return context.getColor(id);
} else {
//noinspection deprecation
return context.getResources().getColor(id);
}
}
Myślę, że kod powinien działać dobrze, a przestarzały getColor
nie może zniknąć z API
A to jest to, czego używam w Kotlinie:
/**
* Returns a color associated with a particular resource ID.
*
* Wrapper around the deprecated [Resources.getColor][android.content.res.Resources.getColor].
*/
@Suppress("DEPRECATION")
@ColorInt
fun getColorHelper(context: Context, @ColorRes id: Int) =
if (Build.VERSION.SDK_INT >= 23) context.getColor(id) else context.resources.getColor(id);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-29 12:00:26
W Androidzie Marshmallow wiele metod jest przestarzałych.
Na przykład, aby uzyskać kolor użyj
ContextCompat.getColor(context, R.color.color_name);
Również, aby uzyskać drawable use
ContextCompat.getDrawable(context, R.drawable.drawble_name);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-15 06:11:06
Dla wszystkich użytkowników Kotlina:
context?.let {
val color = ContextCompat.getColor(it, R.color.colorPrimary)
// ...
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-21 17:18:25
W Kotlinie możesz zrobić:
ContextCompat.getColor(requireContext(), R.color.stage_hls_fallback_snackbar)
If requiecontext () jest dostępne z miejsca, w którym wywołujesz funkcję. Otrzymałem błąd podczas próby
ContextCompat.getColor(context, R.color.stage_hls_fallback_snackbar)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-24 18:04:34
W Twoim RecyclerView w Kotlinie
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(t: YourObject, listener: OnItemClickListener.YourObjectListener) = with(itemView) {
textViewcolor.setTextColor(ContextCompat.getColor(itemView.context, R.color.colorPrimary))
textViewcolor.text = t.name
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-10 17:51:35
If your current min. Poziom API to 23, możesz po prostu użyć getColor()
podobnie jak używamy do pobierania zasobów string przez getString()
:
//example
textView.setTextColor(getColor(R.color.green));
// if `Context` is not available, use with context.getColor()
Możesz ograniczyć poziomy API poniżej 23:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
textView.setTextColor(getColor(R.color.green));
} else {
textView.setTextColor(getResources().getColor(R.color.green));
}
Ale aby to uprościć, możesz zrobić jak poniżej jako zaakceptowaną odpowiedź:
textView.setTextColor(ContextCompat.getColor(context, R.color.green))
Z Zasobów.
From ContextCompat AndroidX.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-11 23:45:34
Jeśli niekoniecznie potrzebujesz zasobów, użyj parseColor(String)
:
Color.parseColor("#cc0066")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-27 03:22:48
Użyj metody getColor(Resources, int, Theme)
ResourcesCompat
z biblioteki wsparcia dla Androida.
int white = ResourcesCompat.getColor(getResources(), R.color.white, null);
Myślę, że lepiej oddaje twoje pytanie niż getColor(Context, int)
z ContextCompat
, ponieważ pytasz o Resources
. Przed poziomem API 23 motyw nie zostanie zastosowany, A metoda wywoła się do getColor(int)
, ale nie będziesz mieć przestarzałego Ostrzeżenia. Tematem może być również null
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-08 07:57:08
Ja też się sfrustrowałem. Moja potrzeba była bardzo prosta. Wszystko, czego chciałem, to kolor ARGB z zasobów, więc napisałem prostą metodę statyczną.
protected static int getARGBColor(Context c, int resId)
throws Resources.NotFoundException {
TypedValue color = new TypedValue();
try {
c.getResources().getValue(resId, color, true);
}
catch (Resources.NotFoundException e) {
throw(new Resources.NotFoundException(
String.format("Failed to find color for resourse id 0x%08x",
resId)));
}
if (color.type != TYPE_INT_COLOR_ARGB8) {
throw(new Resources.NotFoundException(
String.format(
"Resourse id 0x%08x is of type 0x%02d. Expected TYPE_INT_COLOR_ARGB8",
resId, color.type))
);
}
return color.data;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-03 07:41:40
Najlepszym odpowiednikiem jest użycie ContextCompat.getColor
i ResourcesCompat.getColor
. Zrobiłem kilka rozszerzeń dla szybkiej migracji:
@ColorInt
fun Context.getColorCompat(@ColorRes colorRes: Int) = ContextCompat.getColor(this, colorRes)
@ColorInt
fun Fragment.getColorCompat(@ColorRes colorRes: Int) = activity!!.getColorCompat(colorRes)
@ColorInt
fun Resources.getColorCompat(@ColorRes colorRes: Int) = ResourcesCompat.getColor(this, colorRes, null)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-08 08:08:38