不推荐使用 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() [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 getc 和 putc 时添加缓冲

C 语言文件操作 ( getc 和 putc 函数 )

如何编写getLine函数使用getc

ModX getResources & tvFilters 不工作

使用 getc 从文件读取时检查字符

在非活动类中使用 getResources()