使用LinearLayout和Java中的TextView更改颜色(Android)

我是一个相对较新的Android开发人员,我注意到对我来说似乎很奇怪,我希望有人可以解释。 我有LinearLayout ll。

这行代码在执行时失败了:

ll.setBackgroundColor(R.color.white); 

但是这行代码有效:

 ll.setBackgroundResource(R.color.white); 

我假设它只是因为我的资源中定义了白色。 但是,我也尝试在setBackgroundColor()中传递0xFFFFFF,但这也不起作用。

与我的TextView文本类似,这行代码在执行时失败:

 text.setTextColor(R.color.white); 

我可以看到我的TextView所以我知道我正确地初始化它(就像我的LinearLayout,我也可以看到)。 所以我想我的问题归结为:我如何正确使用LinearLayout.setBackgroundColor()和TextView.setTextColor()?

非常感谢提前。 我已经阅读了文档并尝试通过谷歌搜索在线查找信息,但没有提出任何建议。

R.color.whatever是一个int。 它自动生成为对外部定义(在XML中)资源的引用。 当您使用此整数调用setBackgroundColor时,它会尝试将此int的值解析为Color。 setBackgroundResource期望获得传递给它的资源整数。 它检索外部定义的值,然后以这种方式应用颜色。 对于setBackgroundColor ,尝试使用包含alpha的完整hex值颜色,例如0xFFFFFFFF(其中前两个F值是alpha值)。

编辑:马克击败! :P

抢,

问题是setBackgroundColor()正在寻找一个颜色对象。 所以你需要使用类似下面这一行的东西

 ll.setBackgroundColor(Color.WHITE); 

要么

 ll.setBackgroundColor(Color.parseColor("#ffffff")); 

而setBackgroundResource正在寻找用作背景的资源,即res文件夹中的某些内容。 您可以使用它将背景设置为drawable或具有该性质的东西。

 ll.setBackgroundResource(R.something.mydrawable); 

在我的情况下,我必须使用资源中定义的颜色整数和颜色。 虽然它们都是整数,但它们必须具有某种格式才能使用setBackgroundColor(int colorInt)和setBackgroundResource(int resourceIdOfColor)。

我用了:

 int colorInt = getResources().getColor(R.color.resourceIdOfColor) 

以颜色int的格式获取resIds,那么我可以在任何地方使用setBackgroundColor。


您可以使用注释在您自己的代码中区分这两者:

 @ColorInt private int getColor(@ColorRes int id) { return getResources().getColor(id); } 

Android框架API应该已经注释:

 public void setBackgroundResource(@DrawableResource int id); public void setBackgroundColor(@ColorInt int color);