targetSdkVersion 22
我发现有用的getResources().getColor(R.color.color_name)已弃用。
getResources().getColor(R.color.color_name)
我应该用什么代替呢?
我发现有用的getResources(). getcolor (R.color.color_name)已弃用。
根据的文档,它在API级别21中没有被弃用。
它是在M开发者预览中已弃用。然而,替换方法(一个带有两个参数的getColor(),它接受颜色资源ID和一个Resources.Theme对象)只在M开发人员预览中可用。
getColor()
Resources.Theme
因此,现在继续使用单参数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()。
getColor
getTheme()
这将在片段中做的技巧,你可以用getBaseContext(), yourContext等来替换getActivity(),保存你当前的上下文
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中不支持