最近我看到我的代码中出现了一个lint错误:
应该在此处传递已解析的颜色而不是资源ID: getResources()。的getColor(R.color.maps_list_background_color)
MyClass.java / myapp / android / maps第107行Android Lint问题
我知道如何解决它的答案是在错误中,事情是我不明白为什么他们在linter中添加了这个错误。
答案 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。
答案 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)