使用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);