为什么 R.color.white 不起作用而 Color.WHITE 起作用?

3

我正在尝试设置一个非常简单的布局的背景:

  LinearLayout ll = (LinearLayout) findViewById(R.id.simple_layout);

这是有效的:

  ll.setBackgroundColor(Color.WHITE);

但是这个不会:
  ll.setBackgroundColor(R.color.white);

是的,我确认 R.color.white/res/values 目录下的 colors.xml 文件中定义了。

我还缺少什么吗?


1
R.color.white被定义为什么? - Yevgeny Simkin
@Dr.Dredel <color name="white">#FFFFFF</color> 但我已经找到了问题的根源。请看下面,我将在5分钟内接受它。 - Eternal Learner
如果你正在使用Eclipse,请确保已安装最新的ADT。Lint插件将实际上将其标记为错误。 - Michael
2个回答

7
你需要使用ll.setBackgroundResource(R.color.white)。这将为你的视图设置一个白色背景。

4
你说得对。我忘记了颜色值和颜色资源ID之间的区别。有时候我真的很糊涂……编译器没有抱怨,因为它们都是“int”类型。另一种方法是将资源转换为颜色:getResources().getColor(int); - Eternal Learner
在这个未来,我们使用ContextCompat.getColor(context, R.color.white) - GabrielOshiro

1

正如@Ali所指出的那样,当您将其设置为XML时,它就变成了一种资源。这显然很令人困惑,因为你不会把它看作一种资源,而是将其视为一个值。 但就像所有其他资源一样,它也是一种资源。因此,是的,您必须使用setBackgroundResource()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接