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

Leo*_*eoz 41 android lint

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

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

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

ter*_*er0 46

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

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

  • 即使用户创建的方法中也包含"颜色"一词,这种lint错误似乎也显示出来.我认为将`@ ColorRes`添加到`int`参数会删除此错误,但事实并非如此. (3认同)
  • @JasonRobinson更具体地说,如果你的方法以"color"这个词结尾.我只是将我的方法命名为`setButtonColorInt`并且警告消失了. (3认同)

Ray*_*oix 41

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

检查getResources().getColor()是否已被弃用

ContextCompat.getColor(context, R.color.color_name)
Run Code Online (Sandbox Code Playgroud)

  • AWESOMEE​​EEE,非常感谢,使用getResources()时,这也处理了api <17的麻烦。getColor(id,theme)非常感谢 (2认同)

Mah*_*raa 7

使用注释@ColorInt确认这是颜色而不是颜色引用ID.

请参阅: android.support.annotation.ColorInt


tsu*_*uki 6

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

int color = ContextCompat.getColor(getContext(),your_color_id);
Run Code Online (Sandbox Code Playgroud)

现在,您具有相对于当前上下文的颜色使用以下方法设置颜色:

your_view.setBackgroundColor(color);
Run Code Online (Sandbox Code Playgroud)