53

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

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

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

4

7 回答 7

58

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

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

于 2013-09-11T10:39:19.027 回答
49

由于我仍然在谷歌上找到它并且它已被弃用,我想我不妨分享一下当前的方法。

检查getResources().getColor() 已弃用

ContextCompat.getColor(getApplicationContext(), R.color.color_name)
于 2015-11-12T14:43:14.770 回答
7

使用注释@ColorInt来确认这是颜色而不是颜色参考 ID。

请参阅: android.support.annotation.ColorInt

于 2016-07-12T09:09:40.197 回答
7

由于getResources().getColor()已弃用,您需要执行此操作以获取颜色:

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

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

your_view.setBackgroundColor(color);
于 2017-04-28T18:58:43.717 回答
4

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

我有自己的功能类:

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

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

所以,我做了简单的:重命名setBackgroundColorsetBackgroundColorr.

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

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

于 2016-02-15T11:12:57.533 回答
0

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

requireContext().getColor(R.color.myColor);
于 2021-08-11T23:45:44.220 回答
-2

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

新的皮棉规则

您可能会对此感到不满,或者尝试实现它们的语法。

于 2013-06-29T06:50:19.053 回答