不推荐使用 getResources().getColor() [重复]
Posted
技术标签:
【中文标题】不推荐使用 getResources().getColor() [重复]【英文标题】:getResources().getColor() is deprecated [duplicate] 【发布时间】:2015-10-28 20:20:21 【问题描述】:使用:
buildToolsVersion "22.0.1"
,
targetSdkVersion 22
在我的 gradle 文件中。
我发现有用的getResources().getColor(R.color.color_name)
已被弃用。
我应该改用什么?
【问题讨论】:
你在哪里看到的? developer.android.com/reference/android/content/res/… 这里已经讨论过了:***.com/questions/31590714/… 使用 ContextCompat.getColor(context, R.color.color_name) 在适配器 context.getResources() 中。 ContextCompat.getColor(context, R.color.colorname) 对于片段,它将是“作为上下文的活动”,对于活动,它将是“this” 【参考方案1】:看起来最好的方法是使用:
ContextCompat.getColor(context, R.color.color_name)
例如:
yourView.setBackgroundColor(ContextCompat.getColor(applicationContext,
R.color.colorAccent))
这将选择棉花糖两种参数方法或预先适当的蛋白软糖方法。
【讨论】:
Kotlin:将 'applicationContext' 替换为 'this'【参考方案2】:好吧,它在 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 中已弃用,但可绘制在 L 中已弃用
【讨论】:
我会使用getActivity().getTheme()
,而不是getContext().getTheme()
它非常有用。它为我工作【参考方案3】:
您需要使用 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'
【讨论】:
【参考方案4】:我发现有用的 getResources().getColor(R.color.color_name) 已被弃用。
根据the documentation,它在 API 级别 21 中未被弃用。
它在 M 开发者预览版中被弃用。但是,替换方法(采用颜色资源 ID 和 Resources.Theme
对象的两参数 getColor()
)仅在 M Developer Preview 中可用。
因此,现在,继续使用单参数getColor()
方法。今年晚些时候,考虑在 Android M 设备上使用双参数 getColor()
方法,在旧设备上回退到已弃用的单参数 getColor()
方法。
【讨论】:
以上是关于不推荐使用 getResources().getColor() [重复]的主要内容,如果未能解决你的问题,请参考以下文章