getResources().getColor() 已弃用

getResources().getColor() is deprecated

使用: buildToolsVersion "22.0.1" , targetSdkVersion 22 在我的 gradle 文件中。

我发现有用的 getResources().getColor(R.color.color_name) 已被弃用。

我应该改用什么?

I found that the useful getResources().getColor(R.color.color_name) is deprecated.

根据 the documentation

,API 级别 21 未弃用它

在 M Developer Preview 中已弃用。但是,替换方法(采用颜色资源 ID 的双参数 getColor()Resources.Theme 对象)仅在 M Developer Preview 中可用。

因此,现在继续使用单参数getColor()方法。今年晚些时候,考虑在 Android M 设备上使用双参数 getColor() 方法,在旧设备上回退到已弃用的单参数 getColor() 方法。

看起来最好的方法是使用:

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

例如:

yourView.setBackgroundColor(ContextCompat.getColor(applicationContext,
                            R.color.colorAccent))

这将适当地选择Marshmallow二参数方法或pre-Marshmallow方法。

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

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

如文档中所述,"Starting in M, the returned color will be styled for the specified Context's theme"。所以不用担心。

您可以通过将以下内容添加到应用程序中的依赖项数组来添加 Support V4 库 build.gradle:

compile 'com.android.support:support-v4:23.0.1'

好吧,它在 android M 中已被弃用,因此您必须为 android M 及更低版本设置例外。只需在 getColor 功能上添加当前主题。您可以使用 getTheme().

获取当前主题

这将在片段中发挥作用,您可以将 getActivity() 替换为 getBaseContext()yourContext 等,它们包含您当前的上下文

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    yourTitle.setTextColor(getActivity().getResources().getColor(android.R.color.white, getActivity().getTheme()));
}else {
    yourTitle.setTextColor(getActivity().getResources().getColor(android.R.color.white));
}

*p.s : 颜色在 M 中被弃用,但 drawable 在 L

中被弃用