La Resources.getColor(int id) método ha sido desaprobado.

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

¿Qué debo hacer?

  • Uso ContextCompat.getColor(contexto, R. de color.color_name)
InformationsquelleAutor araks | 2015-07-23

19 Comentarios

  1. 1294

    A partir de Android Support Library 23,

    una nueva getColor() método ha sido añadido a ContextCompat.

    Su descripción oficial de los JavaDoc:

    Devuelve un color asociado con un determinado ID de recurso

    De partida en M, que devuelve el color va a ser de estilo para el Contexto específico del tema.

    Así, acaba de llamar:

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

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

    • Esto parece la solución, pero ¿qué se supone que vamos a hacer cuando lleguemos a un error «Debe pasar resuelto de color en lugar de identificador de recurso de aquí»? Como lo que puedo decir, es probablemente porque la Pelusa no reconoce la nueva API de la Biblioteca de Compatibilidad, así que tal vez sólo añadir una anotación @SuppressWarnings(«ResourceAsColor») es el camino a seguir? No me gusta mucho aunque.
    • Hola @Stan, puede usted por favor proporcione el fragmento de código con la llamada al método que desencadena la «ResourceAsColor» Pelusa?
    • «int color = ContextCompat.getColor(this, R. de color.naranja);» y luego «span = new ForegroundColorSpan(color);». La palabra que se subrayan en rojo es «el color», donde se lo paso a «nuevas ForegroundColorSpan()».
    • He intentado en mi PC, y no se dan fuera de la advertencia. Estoy usando Android Studio 2.1 vista previa de 1 y de Apoyo de la Biblioteca 23.2.1. ¿Cuál es tu configuración?
    • Estoy utilizando el mismo Android Studio, trató de Apoyo de la biblioteca 23.1.1 y 23.2.1. Además, estoy construyendo en Mac, Android Studio se ejecuta con jdk1.7.0_79.jdk para el IDE de sí mismo, y también para la construcción del proyecto (por defecto se usa Java 1.6 para el IDE en Mac). No conozco la versión de Pelusa o cómo comprobarlo, pero estoy empezando a pensar que la razón está en otra parte.
    • misma configuración aquí. No sé qué otra cosa podría ser, lo siento!
    • Permítanos continuar esta discusión en el chat.
    • La inspección de la ContextCompat.getColor(…), no es necesario comprobar mediante programación para la versión de Compilación debido a que el método ya lo hace por ti.
    • Si usted lee cuidadosamente la respuesta, verás que el código que comprueba la versión de compilación es en realidad el ContextCompat código fuente…!
    • sí, eso es lo que me dijo. Eso es lo que vi cuando me inspeccionar el código fuente. De todos modos, vamos a unirse a la conversación si quieren hablar de esto.
    • oh… lo siento, no he entendido tu comentario! 🙂
    • Esto no está funcionando para mí. ¿Cómo utilizar esta nueva forma de obtener el color si tu aplicación es compatible inferior de la API de 23? El getContext() en mi código está subrayado en rojo en Android Studio, porque el más bajo de la API de mi aplicación soporta es de 16.
    • esto funciona en todo el camino hacia abajo a la API de 4, si su getContext (), está subrayada en rojo y luego hay otro problema… ¿Qué hace el IDE sugieren que si dejas el ratón sobre el error de un par de segundos?
    • gracias, yo tengo trabajo, es porque estaba en un fragmento
    • Yo también tengo una línea roja, supongo que me estoy perdiendo una importación? ¿Cómo deshacerse de él?
    • ContextCompatApi23 esta marca error supuesto de que la referencia ContextCompat
    • Para aquellos que no quieren utilizar ContextCompat simplemente utilizar Context.getColor(int id).
    • Pero este ContextCompat devuelve un id de color a la derecha? Para lugares en donde el Color se espera que se le suponga para generar el color como nuevo Color(ContextCompat.getColor(contexto, R. de color.your_color)) ?
    • Yo no se lo que es el uso del «tema». ¿Hay algún ejemplo?

  2. 483

    tl;dr:

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

    Explicación:

    Deberá utilizar ContextCompat.getColor(), que es parte del Apoyo que la V4 de la Biblioteca (que va a trabajar para todos los anteriores Api).

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

    Si ya no utiliza la Biblioteca de Soporte técnico, usted tendrá que añadir la siguiente línea a la dependencies matriz en el interior de su aplicación build.gradle (nota: es opcional si ya el uso de la appcompat (V7) de la biblioteca):

    compile 'com.android.support:support-v4:23.0.0' # or any version above

    Si usted se preocupa acerca de los temas, la documentación que se especifica que:

    De partida en M, que devuelve el color va a ser de estilo para la especificada
    Contexto del tema

    • Esta debe ser la seleccionada como respuesta correcta. Porque en el enlace de Android de google Docs, es decir, «de Partida en M, que devuelve el color va a ser de estilo para el Contexto específico del tema.«
    • compilar ‘com.android.apoyo:appcompat-v7:23.0.1’
    • O Rilla Como se puede ver en la documentación, el ContextCompat clase viene de SupportV4. AppcompatV7 funciona demasiado ya que se basa en SupportV4. Como dicen en el Soporte de documentación de la Biblioteca, 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 de no poner AppcompatV7 en la respuesta.
    • Gracias @Melvin, aquí está mi ejemplo caso de uso: int colorTwitterBlue = ContextCompat.getColor(this, R. de color.color_twitter_blue); composeTweetAlertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(colorTwitterBlue); composeTweetAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(colorTwitterBlue);
    • Quien votada abajo esta respuesta, lo menos que puede hacer es, al menos, escriba un comentario sobre lo que es la cuestión…
    • ¿Qué significa exactamente el color va a ser de estilo para el Contexto específico del tema». Suena como uno puede definir colores diferentes para el mismo id de color dependiendo del tema. ¿Cómo se hace exactamente?
    • ¿Cuál es el uso de el tema, a pesar de que?

  3. 42

    No quiero incluye el Apoyo a la biblioteca 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 desuso getColor no pueden desaparecer de la API < 23.

    • Mirando el código fuente, esto es exactamente cómo el apoyo de la biblioteca hace. I objetivo de la API >= 21 así que no quiero que incluyen un frasco para estas pocas líneas. Tenga en cuenta que puede suprimir la advertencia en Android Studio agregando «//noinspection en desuso» por encima de la obsoleta llamada. Y el uso de una Actividad de contexto, no en el contexto de una Aplicación, o usted podría perder el tema de la información.
    • Esta debe ser la respuesta correcta, aunque el apoyo de la biblioteca puede ser más futuro a prueba de elección, estoy de acuerdo en que si esta es la única razón por la que incluye el apoyo a la biblioteca para, mejor, incluyendo estos par de líneas.
  4. 28

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

    Por ejemplo, para conseguir el color uso

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

    También para obtener dibujable uso

    ContextCompat.getDrawable(context, R.drawable.drawble_name);
    • ¿de dónde la variable contexto vienen? ¿tengo que inicializar? Yo no puedo conseguir que funcione. A mí me parece Androind tiene un largo camino por recorrer; sopla mi f mente cuánto estoy luchando para conseguir una f de color a partir de un xml de recursos!! Wow
  5. 27

    Para todos los Kotlin usuarios:

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

    Para Dibujable

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

    De Color

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

    Puede utilizar:

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

    Probado en Android Malvavisco. Se trabajó.

  8. 7

    La getColor() método está en desuso en la API de 23, y fue introducida en ContextCompat. Antes de usar el getColor() método que utiliza ContextCompat, agregar las dependencias en la construcción.gradle script, el cual es:

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

    A continuación, el getColor() método que puede ser utilizado como:

    int colorcode = ContextCompat.getColor(getApplicationContext(), R.color.your_color);
    • Este último trabajó para mí. Muchísimas gracias!
  9. 6

    Código con multi soporte de API:

    if (Build.VERSION.SDK_INT < 23) {
        view.setBackgroundColor(getResources().getColor(android.R.color.white));
    } else {
        view.setBackgroundColor(getContext().getColor(android.R.color.white));
    }
  10. 2

    Utilizar el getColor(Resources, int, Theme) método de la ResourcesCompat desde el Android Support Library.

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

    Creo que reflejan mejor su pregunta de la getColor(Context, int) de la ContextCompat ya de preguntar acerca de Resources. Antes de la API de nivel 23, el tema no será aplicado y el método de las llamadas a través de getColor(int) pero no tendrás el desuso de advertencia. El tema también puede ser null.

    • Si se pasa null como Tema de argumento, devuelve el color NO va a ser de estilo para el tema actual. Así que podría ser incorrecto.
  11. 2

    En Mono /xamarin.android he tenido el mismo problema y el siguiente código funcionó a la perfección:

    ContextCompat.GetColor (context, Resource.Color.myColor)

    En mi caso el contexto es mi actividad (Android.Apoyo.V7.App.AppCompatActivity) por lo que una de mis reales-ejemplo de uso es:

    var color = new Android.Graphics.Color(ContextCompat.GetColor(this, Resource.Color.myColor))    
  12. 2

    Usar este:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return context.getResources().getColor(id, context.getTheme());
    } else {
        return context.getResources().getColor(id);
    }
  13. 2

    En Su RecyclerView 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
        }
    }
  14. 1

    Aunque getColor() está en desuso en la melcocha, el método de sustitución

    getColor(int, Theme) está disponible. Que puede ser utilizado como una alternativa a ContextCompat.getColor(context, R.color.your_color);

    consulte este para obtener más información.

  15. 0

    De esta manera:

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

    Me frustré demasiado. Mi necesidad era muy sencillo. Todo lo que quería era la ARGB color de los recursos, así que escribí un simple método estático.

    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;
    }
  17. 0

    Con este método mencionado anteriormente: getColor(contexto, R. de color.your_color); no está claro cómo conseguir el «contexto». No funciona con solo colocar contexto, en mi caso, android studio 3.2. Me parece que esto funciona para mí. .setTextColor(de Color.ROJO).

Dejar respuesta

Please enter your comment!
Please enter your name here