协慌网

登录 贡献 社区

getColor(int id)在 Android 6.0 棉花糖(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 开始,将为指定的 Context 主题设置返回颜色的样式。


因此,只需致电

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

您可以在 GitHub 上ContextCompat.getColor()源代码。

tl; dr:

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

解释:

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

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

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

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

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

从 M 开始,将为指定的 Context 主题设置返回的颜色样式

我不想只为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不能从 < 23 的 API 中消失。

这就是我在 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);