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

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

我应该用什么代替呢?


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

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

在M开发人员预览中已弃用。但是,替换方法(一个带有两个参数的getColor(),它接受颜色资源ID和一个Resources。主题对象)仅在M开发人员预览中可用。

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


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

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

eg:

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中不支持