android - resource - kotlin get color
getColor(int id) en desuso en Android 6.0 Marshmallow(API 23) (19)
A partir de la Biblioteca de soporte de Android 23,
Se ha agregado un nuevo método
getColor()
a
ContextCompat
.
Su descripción del JavaDoc oficial:
Devuelve un color asociado con un ID de recurso particular
Comenzando en M, el color devuelto tendrá un estilo para el tema del Contexto especificado.
Entonces, solo llame :
ContextCompat.getColor(context, R.color.your_color);
Puede consultar el
código fuente
ContextCompat.getColor()
en GitHub
.
El método
Resources.getColor(int id)
ha quedado en desuso.
@ColorInt
@Deprecated
public int getColor(@ColorRes int id) throws NotFoundException {
return getColor(id, null);
}
¿Qué tengo que hacer?
Aunque
getColor()
está en desuso en malvavisco, el método de reemplazo
getColor(int, Theme)
está disponible.
Que se puede usar como una alternativa a
ContextCompat.getColor(context, R.color.your_color);
consulte this para más información.
Código con soporte multi API:
if (Build.VERSION.SDK_INT < 23) {
view.setBackgroundColor(getResources().getColor(android.R.color.white));
} else {
view.setBackgroundColor(getContext().getColor(android.R.color.white));
}
Con este método mencionado anteriormente: getColor (contexto, R.color.your_color); No está claro cómo obtener el "contexto". No funcionará simplemente poniendo contexto allí en mi caso, android studio 3.2. Me parece que esto funciona para mí. .setTextColor (Color.RED).
De esta manera:
fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.badge_participants_counter_color)));
El método getColor () está en desuso en API 23, y se introdujo en ContextCompat. Antes de usar el método getColor () usando ContextCompat, agregue las dependencias en el script build.gradle, que es:
dependencies{
// Other stuff
compile ''com.android.support:support-v4:23.0.0''
}
Entonces el método getColor () se puede usar como:
int colorcode = ContextCompat.getColor(getApplicationContext(), R.color.your_color);
En Android Marshmallow, muchos métodos están en desuso.
Por ejemplo, para usar el color
ContextCompat.getColor(context, R.color.color_name);
También para obtener un uso dibujable
ContextCompat.getDrawable(context, R.drawable.drawble_name);
En Mono / xamarin.android tuve el mismo problema y el siguiente código funcionó perfectamente:
ContextCompat.GetColor (context, Resource.Color.myColor)
En mi caso, el contexto es mi actividad (Android.Support.V7.App.AppCompatActivity), por lo que mi ejemplo de uso real es:
var color = new Android.Graphics.Color(ContextCompat.GetColor(this, Resource.Color.myColor))
En su recicladorVer en Kotlin
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
}
}
La respuesta más corta es:
ContextCompat.getColor(context, R.color.colorAccent);
No quiero incluir la biblioteca de soporte solo para getColor , así que estoy usando algo como
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);
}
}
Supongo que el código debería funcionar bien, y el
getColor
desuso no puede desaparecer de la API <23.
Para dibujable
ContextCompat.getDrawable(getApplicationContext(),R.drawable.back_arrow)
Para el color
ContextCompat.getColor(getApplicationContext(),R.color.red)
Para todos los usuarios de Kotlin:
context?.let {
val color = ContextCompat.getColor(it, R.color.colorPrimary)
// ...
}
Puedes usar:
if (Build.VERSION.SDK_INT >= 23) {
return ctx.getColor(R.color.YOURCOLOR);
} else {
return ctx.getRecources().getColor(R.color.YOURCOLOR);
}
Probado en Android Marshmallow. Funcionó.
Si no necesariamente necesita los recursos, use
parseColor(String)
:
Color.parseColor("#cc0066")
Utilice el
getColor(Resources, int, Theme)
de
ResourcesCompat
de la Biblioteca de soporte de Android.
int white = new ResourcesCompat().getColor(getResources(), R.color.white, null);
Creo que refleja mejor su pregunta que el
getColor(Context, int)
de
ContextCompat
ya que pregunta sobre
Resources
.
Antes del nivel 23 de API, el tema no se aplicará y el método llamará a
getColor(int)
pero no tendrá la advertencia en desuso.
El tema también puede ser
null
.
Utilizar este:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return context.getResources().getColor(id, context.getTheme());
} else {
return context.getResources().getColor(id);
}
Yo también me frustré. Mi necesidad era muy directa. Todo lo que quería era el color ARGB de los recursos, así que escribí un método estático simple.
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;
}
tl; dr:
ContextCompat.getColor(context, R.color.my_color)
Explicación:
Deberá utilizar getColor() , que forma parte de la Biblioteca de Support V4 (funcionará para todas las API anteriores).
ContextCompat.getColor(context, R.color.my_color)
Si aún no usa la Biblioteca de soporte, deberá agregar la siguiente línea a la matriz de
dependencies
dentro de su aplicación
build.gradle
(nota:
es opcional si ya usa la biblioteca appcompat (V7)
):
compile ''com.android.support:support-v4:23.0.0'' # or any version above
Si le interesan los temas, la documentación especifica que:
Comenzando en M, el color devuelto tendrá un estilo para el tema del contexto especificado