最近我看到我的代码中出现了一个 lint 错误:
应该在这里传递解析的颜色而不是资源 id: getResources().getColor(R.color.maps_list_background_color)
MyClass.java /myapp/android/maps 第 107 行 Android Lint 问题
我知道如何解决它,答案在错误中,问题是我不明白为什么他们在 linter 中添加了这个错误。
采用整数形式的颜色的方法应该传递一个 RGB 三元组,而不是实际的颜色资源 ID。您必须调用 getResources.getColor(resource)。
您正在调用的函数需要一个 RGB 三元组的整数,而不仅仅是颜色资源的 id。颜色资源 id 仍然是一个整数,但如果将其用作 RGB 三元组,则不会产生您期望的颜色。为了将正确的 RGB 三元组传递给您的颜色,您必须通过getResources().getColor(R.color.example_color)
调用解决它。
由于我仍然在谷歌上找到它并且它已被弃用,我想我不妨分享一下当前的方法。
检查getResources().getColor() 已弃用
ContextCompat.getColor(getApplicationContext(), R.color.color_name)
使用注释@ColorInt
来确认这是颜色而不是颜色参考 ID。
由于getResources().getColor()
已弃用,您需要执行此操作以获取颜色:
int color = ContextCompat.getColor(getContext(),your_color_id);
现在您有了与当前上下文相关的颜色 使用以下方法设置颜色:
your_view.setBackgroundColor(color);
至于我,这是非常愚蠢的警告。
我有自己的功能类:
public static final void setBackgroundColor(View v, int id) {
// Here I get color by id from resources and setBackgroundColor of this color.
}
无论如何,如果我尝试 call setBackgroundColor
,我会收到警告。但为什么?
所以,我做了简单的:重命名setBackgroundColor
为setBackgroundColorr
.
color
如果在函数名称处找到名称,则会激活此警告。
是的,我不喜欢名称 setColorBackground 或任何其他 :-)
如果您使用的是 androidx,您可以执行以下操作:
requireContext().getColor(R.color.myColor);