Pregunta getColor (int id) desaprobado en Android 6.0 Marshmallow (API 23)


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

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

¿Que debería hacer?


574
2017-07-23 14:44


origen


Respuestas:


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

Su descripción del JavaDoc oficial:

Devuelve un color asociado con una ID de recurso particular

Comenzando en M, el color devuelto se diseñará para el tema del Contexto especificado.


Asi que, solo llama:

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


Usted puede verificar ContextCompat.getColor()  código fuente en GitHub.


1151
2017-07-23 14:52



tl; dr:

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

Explicación:

Necesitarás usar ContextCompat.getColor (), que es 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 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 importan los temas, la documentación especifica que:

Comenzando en M, el color devuelto se diseñará para el especificado   El tema del contexto


423
2017-08-21 21:08



No quiero incluir la biblioteca de soporte solo para getColor, entonces estoy usando algo así

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.


36
2017-09-11 12:29



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

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

28
2017-08-28 05:07



Para Drawable

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

Para el color

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

15
2018-01-12 09:56



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


8
2017-08-27 18:25



La respuesta más corta es:

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

7
2017-07-28 05:33