getColor(int id) obsoleto en Android 6.0 Marshmallow (API 23)

6 minutos de lectura

getColorint id obsoleto en Android 60 Marshmallow API 23
Araks

los Resources.getColor(int id) el método ha quedado en desuso.

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

¿Qué tengo que hacer?

  • Utilice ContextCompat.getColor(contexto, R.color.color_name)

    – Ashokchakravarthi Nagarajan

    31 de marzo de 2016 a las 4:56

  • Con este método mencionado anteriormente: getColor(context, 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. Encuentro que esto funciona para mí. .setTextColor(Color.RED).

    – Harry

    28 de abril de 2019 a las 16:33

getColorint id obsoleto en Android 60 Marshmallow API 23
Araks

A partir de la Biblioteca de soporte de Android 23,

un nuevo obtenerColor() Se ha añadido el método ContextCompat.

Su descripción del JavaDoc oficial:

Devuelve un color asociado con un ID de recurso en particular

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

Entonces, solo llama:

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

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

  • Esto parece ser la solución, pero ¿qué se supone que debemos hacer cuando recibimos un error “Debe pasar el color resuelto en lugar de la identificación del recurso aquí”? Por lo que puedo decir, probablemente se deba a que Lint no reconoce la nueva API de la Biblioteca de soporte, por lo que tal vez solo agregar una anotación @SuppressWarnings (“ResourceAsColor”) es el camino a seguir. Aunque no me gusta mucho.

    – Stan

    15/03/2016 a las 16:40

  • Hola, @Stan, ¿puedes proporcionar el fragmento de código con la llamada al método que activa la pelusa “ResourceAsColor”?

    – araks

    15/03/2016 a las 17:02

  • @MonicaLabbao oh… lo siento, ¡no entendí bien tu comentario! 🙂

    – araks

    15 de agosto de 2016 a las 12:28

  • ContextCompatApi23 este error de marca supone que usted hace referencia a ContextCompat

    – Webserveis

    25/11/2016 a las 19:45

  • No entiendo cuál es el uso del “tema”. ¿Hay algún ejemplo?

    – desarrollador de Android

    3 de marzo de 2019 a las 0:46

getColorint id obsoleto en Android 60 Marshmallow API 23
Melvin

tl; dr:

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

Explicación:

Tendrás que usar ContextCompat.getColor()que forma parte de la biblioteca 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 al dependencies matriz 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:

A partir de M, el color devuelto se diseñará para el tema del Contexto especificado

  • Esta debe ser la respuesta seleccionada como correcta. Porque en el enlace dado de Android Docs, dice “A partir de Mel color devuelto tendrá el estilo del tema del Contexto especificado.

    – Los errores suceden

    23 de agosto de 2015 a las 17:33

  • compila ‘com.android.support:appcompat-v7:23.0.1’

    – G O’Rilla

    26/09/2015 a las 13:55

  • @G O’Rilla Como puede ver en la documentación, el ContextCompat La clase proviene de SupportV4. AppcompatV7 también funciona, ya que se basa en SupportV4. Como dicen en el Documentación de la biblioteca de soporte, 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.. Así que tiene sentido no poner AppcompatV7 en la respuesta

    – Melvin

    26/09/2015 a las 21:06


  • Gracias @Melvin, aquí está mi ejemplo si es útil: int colorTwitterBlue = ContextCompat.getColor(this, R.color.color_twitter_blue); composeTweetAlertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(colorTwitterBlue); composeTweetAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(colorTwitterBlue);

    – Lara Ruffle Coles

    27/04/2016 a las 20:48


  • @Melvin. ¿Qué significa exactamente que el ‘color se diseñará según el tema del Contexto especificado’? Parece que uno puede definir diferentes colores para la misma identificación de color según el tema. ¿Cómo se hace esto exactamente?

    – RobertoCuba

    14/02/2017 a las 21:43

1646748974 959 getColorint id obsoleto en Android 60 Marshmallow API 23
alex vang

No quiero incluir la biblioteca de soporte solo para obtenerColorasí 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 API < 23.

Y esto es lo que estoy usando en Kotlin:

/**
 * 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);

  • Mirando el código fuente, así es exactamente como lo hace la biblioteca de soporte. Me dirijo a API >= 21, por lo que no quiero incluir un contenedor completo para estas pocas líneas. Tenga en cuenta que puede suprimir la advertencia en Android Studio agregando “//no inspección obsoleta” encima de la llamada obsoleta. Y use un contexto de actividad, no un contexto de aplicación, o podría perder información del tema.

    – persona3000

    22 de diciembre de 2015 a las 4:52

  • Esta debería ser la respuesta correcta, aunque la biblioteca de soporte puede ser una opción más preparada para el futuro, estoy de acuerdo en que si esta es la única razón por la que incluye la biblioteca de soporte, es mejor que incluya este par de líneas.

    – anthonymonori

    06/11/2016 a las 17:40

1646748975 337 getColorint id obsoleto en Android 60 Marshmallow API 23
Ashokchakravarthi Nagarajan

En Android Marshmallow, muchos métodos están en desuso.

Por ejemplo, para obtener el uso de color

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

También para obtener un uso dibujable.

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

getColorint id obsoleto en Android 60 Marshmallow API 23
Pablo Spiesberger

Para todos los usuarios de Kotlin:

context?.let {
    val color = ContextCompat.getColor(it, R.color.colorPrimary)
    // ...
}

  • en realidad debería ser val color = ContextCompat.getColor(context, R.color.colorPrimary). La variable “eso” podría ser cualquier cosa, pero debe ser un Contexto.

    – SM Biggs

    28 de octubre de 2019 a las 1:18


  • it es en este caso el contextya que uso context?.let { para comprobar si el context No es nulo. La función getColor() solo acepta un contexto no nulo. Leer más aquí sobre let Y cómo usarlo: kotlinlang.org/docs/reference/scope-functions.html#let

    –Paul Spiesberger

    28 de octubre de 2019 a las 8:33

1646748978 897 getColorint id obsoleto en Android 60 Marshmallow API 23
Jaime

En Kotlin, puedes hacer:

ContextCompat.getColor(requireContext(), R.color.stage_hls_fallback_snackbar)

si se puede acceder a requireContext() desde donde está llamando a la función. Estaba recibiendo un error al intentar

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

  • en realidad debería ser val color = ContextCompat.getColor(context, R.color.colorPrimary). La variable “eso” podría ser cualquier cosa, pero debe ser un Contexto.

    – SM Biggs

    28 de octubre de 2019 a las 1:18


  • it es en este caso el contextya que uso context?.let { para comprobar si el context No es nulo. La función getColor() solo acepta un contexto no nulo. Leer más aquí sobre let Y cómo usarlo: kotlinlang.org/docs/reference/scope-functions.html#let

    –Paul Spiesberger

    28 de octubre de 2019 a las 8:33

1646748980 163 getColorint id obsoleto en Android 60 Marshmallow API 23
younes

en la actividad utilizada ContextCompat

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

en adaptador

private Context context;


context.getResources().getColor()

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad