已解析的颜色而不是资源ID

时间:2012-12-21 11:28:55

标签: android lint

最近我看到我的代码中出现了一个lint错误:

  

应该在此处传递已解析的颜色而不是资源ID:   getResources()。的getColor(R.color.maps_list_background_color)
  MyClass.java / myapp / android / maps第107行Android Lint问题

我知道如何解决它的答案是在错误中,事情是我不明白为什么他们在linter中添加了这个错误。

7 个答案:

答案 0 :(得分:44)

  

采用整数形式的颜色的方法应该传递RGB三元组,而不是实际的颜色资源ID。您必须调用getResources.getColor(resource)。

您正在调用的函数期望一个RGB三元组的整数,而不仅仅是颜色资源的id。颜色资源ID仍然是整数,但如果将其用作RGB三元组,则不会产生您期望的颜色。为了为您的颜色传递正确的RGB三元组,您必须使用getResources().getColor(R.color.example_color)调用解决它。

答案 1 :(得分:40)

由于我仍然在谷歌上发现这个并且它已被弃用,我想我不妨分享目前这样做的方法。

检查getResources().getColor() is deprecated

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

答案 2 :(得分:6)

使用注释DEBUG = False确认颜色不是颜色引用ID。

请参阅: android.support.annotation.ColorInt

答案 3 :(得分:4)

至于我,这是一个非常愚蠢的警告。

我有自己的功能类:

public static final void setBackgroundColor(View v, int id) {
// Here I get color by id from resources and setBackgroundColor of this color.
}

无论如何,如果我尝试拨打setBackgroundColor,我会收到警告。但为什么呢?

所以,我做得很简单:将setBackgroundColor重命名为setBackgroundColorr

如果在功能名称处找到名称color,则会激活此警告。

是的,我不喜欢名字setColorBackground或任何其他: - )

答案 4 :(得分:4)

由于不推荐getResources().getColor(),您需要执行此操作以获取颜色:

int color = ContextCompat.getColor(getContext(),your_color_id);

现在您拥有与当前上下文相关的颜色 使用以下方式设置颜色:

your_view.setBackgroundColor(color);

答案 5 :(得分:0)

如果您使用的是 androidx,则可以执行以下操作:

requireContext().getColor(R.color.myColor);

答案 6 :(得分:-2)

显然这是由棉绒引起的;第三个子弹下来。

New Lint Rules

你可能会压抑这一点,或尝试实现他们的语法。