GetColor (int id) obsoleta en Android 6.0 Marshmallow (API 23)

El método Resources.getColor(int id) ha quedado obsoleto.

 @ColorInt @Deprecated public int getColor(@ColorRes int id) throws NotFoundException { return getColor(id, null); } 

¿Que puedo hacer?

A partir de Android Support Library 23,
Un nuevo método getColor () se ha agregado a ContextCompat .

Su descripción de la JavaDoc oficial:

Devuelve un color asociado con un ID de recurso particular

A partir de M, el color devuelto se denominará para el tema del Contexto especificado.

Así que, llame a :

 ContextCompat.getColor(context, R.color.your_color); 

Puede comprobar el código fuente ContextCompat.getColor() en GitHub .

Tendrá que utilizar ContextCompat.getColor () , que forma parte de la Biblioteca de Soporte V4 (por lo que funcionará para todas las API anteriores).

 ContextCompat.getColor(context, R.color.my_color) 

Si aún no usa la Biblioteca de Soporte, necesitará agregar la siguiente línea a la matriz de dependencies dentro de su aplicación build.gradle (nota: es opcional si ya usa la librería 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:

A partir de M, el color devuelto se denominará para el tema del Contexto especificado

No quiero incluir la biblioteca de soporte sólo 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 obsoleto getColor no puede desaparecer de la API <23.

En Android Marshmallow muchos métodos están obsoletos.

Por ejemplo, para obtener el uso del color

 ContextCompat.getColor(context, R.color.color_name); 

También para obtener uso dibujable

 ContextCompat.getDrawable(context, R.drawable.drawble_name); 

Para Drawable

 ContextCompat.getDrawable(getApplicationContext(),R.drawable.back_arrow) 

Para el color

  ContextCompat.getColor(getApplicationContext(),R.color.red) 

La respuesta más corta es:

 ContextCompat.getColor(context, R.color.colorAccent); 

Puedes usar:

 if (Build.VERSION.SDK_INT >= 23) { return ctx.getColor(R.color.YOURCOLOR); } else { return ctx.getRecources().getColor(R.color.YOURCOLOR); } 

Espero que ayude. Lo probé en Android Marshmallow, y funcionó.

El método getColor () está obsoleto en la API 23 y se introdujo en ContextCompat. Antes de utilizar el método getColor () utilizando ContextCompat, añada las dependencias en la secuencia de comandos build.gradle, que es:

 dependencies{ // Other stuff compile 'com.android.support:support-v4:23.0.0' } 

A continuación, el método getColor () se puede utilizar como:

 int colorcode = ContextCompat.getColor(getApplicationContext(), R.color.your_color); 

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) así que un ejemplo de mi uso real es:

 var color = new Android.Graphics.Color(ContextCompat.GetColor(this, Resource.Color.myColor)) 
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { return context.getResources().getColor(id, context.getTheme()); } else { return context.getResources().getColor(id); } 

Hacer uso de esto.

A pesar de que getColor() es obsoleto en malvavisco, el método de reemplazo
getColor(int, Theme) está disponible. Que se puede utilizar como una alternativa a ContextCompat.getColor(context, R.color.your_color);

Consulte esto para obtener más información.

Utilice el getColor(Resources, int, Theme) del ResourcesCompat de la Biblioteca de soporte técnico de Android.

 int white = new ResourcesCompat().getColor(getResources(), R.color.white, null); 

Pienso que refleja mejor su pregunta que el getColor(Context, int) del ContextCompat desde que usted 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 obsoleta. El tema también puede ser null .

De esta manera:

 fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.badge_participants_counter_color))); 

Me sentí frustrado también. Mi necesidad era muy directa. Todo lo que quería era el color ARGB de los recursos, por lo 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; } 
  • Utilizar Locale para obligar a Android a utilizar un archivo strings.xml específico para un idioma no compatible
  • Android consigue la configuración regional del sistema diferentes
  • ¿Hay un patrón de búsqueda de recursos de cadena de Enum para Android?
  • ¿Reutiliza Android las imágenes cargadas desde el recurso?
  • Programe de forma programática el recurso de fondo de EditText en campo transparente
  • ¿Qué es "android:" prefijo en el módulo android framework-res
  • Recursos de Menú Diferentes de Android
  • Tamaño de pantalla de Android, valores-v11, valores-v14
  • Aplicación multilenguaje: la mejor manera?
  • FindViewById (android.R.id.progress) devuelve null
  • Dibujos extraídos de la carpeta de recursos erróneos en la rotación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.