已弃用getResources().getColor()

< p >使用: # EYZ0, targetSdkVersion 22在我的gradle文件

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

我应该用什么代替呢?

267637 次浏览

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

根据的文档,它在API级别21中没有被弃用。

在M开发者预览中已弃用。然而,替换方法(一个带有两个参数的getColor(),它接受颜色资源ID和一个Resources.Theme对象)只在M开发人员预览中可用。

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

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

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

例如:

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

这将适当地选择棉花糖双参数法或预棉花糖法。

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

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

正如文档中指定的那样,“从M开始,返回的颜色将为指定上下文的主题设置样式”。所以不用担心。

你可以通过在build.gradle的依赖数组中添加以下内容来添加Support V4库:

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

好吧,它在android M中被弃用了,所以你必须为android M和更低的版本例外。只需在getColor函数上添加当前主题。您可以获得当前主题getTheme()

这将在片段中做的技巧,你可以用getBaseContext()yourContext等来替换getActivity(),保存你当前的上下文

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: color在M中不支持,但drawable在L中不支持