studio resource getresources getcolor from color android android-resources android-6.0-marshmallow android-mnc

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ó.



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