【问题标题】:getResources().getColor() is deprecated [duplicate]不推荐使用 getResources().getColor() [重复]
【发布时间】:2015-10-28 20:20:21
【问题描述】:

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

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

我应该改用什么?

【问题讨论】:

标签: android deprecated android-resources android-color


【解决方案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() 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2023-03-31
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多