getColor(int id)在Android 6.0 Marshmallow(API 23)上弃用

Resources.getColor(int id)方法已被弃用。

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

我该怎么办?


从Android支持库23开始,
一个新的getColor()方法已被添加到ContextCompat

它来自官方JavaDoc的描述:

返回与特定资源ID关联的颜色

从M开始,返回的颜色将为指定的上下文主题设计样式。


所以, 只需打电话

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


您可以检查GitHub上的ContextCompat.getColor()源代码。


TL;博士:

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

说明:

您需要使用ContextCompat.getColor(),它是Support V4 Library的一部分(它将适用于所有以前的API)。

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

如果您尚未使用支持库,则需要将以下行添加到应用程序build.gradledependencies数组中(注意:如果您已经使用appcompat(V7)库,则它是可选的):

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

如果您关心主题,文档指定:

从M开始,返回的颜色将为指定的上下文主题设计样式


我不想为getColor包含支持库,所以我正在使用类似的东西

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

我猜代码应该工作得很好,而且不赞成的getColor不能从API <23中消失。

链接地址: http://www.djcxy.com/p/85371.html

上一篇: getColor(int id) deprecated on Android 6.0 Marshmallow (API 23)

下一篇: Android custom permissions