程序化设置背景颜色

179

我尝试以编程的方式设置背景颜色,但当我设置所有颜色时,背景变成了黑色,而不是与应用程序主题相同的白色背景。

View someView = findViewById(R.id.screen);
View root = someView.getRootView();
root.setBackgroundColor(color.white);

你能看见这段代码吗?


5
color.white是指白色。 - weston
8个回答

236

我不明白你的问题...你说的“当我设置每一个颜色”是什么意思?试试这个(修改:原回答中的“#fffff”更改为“#ffffff”)

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

145

你需要使用getResources()方法,尝试使用以下代码:

View someView = findViewById(R.id.screen);
View root = someView.getRootView();
root.setBackgroundColor(getResources().getColor(color.white)); 

编辑:

getResources.getColor()已经被弃用,因此请按以下方式使用

 root.setBackgroundColor(ContextCompat.getColor(this, R.color.white)); 

12
getResources().getColor() 已经被废弃。 - forsberg
1
在AppCompatActivity中,您可以直接使用context.getColor()或this.getColor - 在片段中,您可以使用getActivity().getColor()。 - Patric

47

您可以使用

 root.setBackgroundColor(0xFFFFFFFF);
或者
 root.setBackgroundColor(Color.parseColor("#ffffff"));

1
root.setBackgroundColor(Color.RED);同样地。 - Zar E Ahmer
1
如果使用第一个示例,哪些字节映射到哪些颜色分量?例如,是 0xRRGGBBAA,还是 0xAARRGGBB,或者是 0xBBGGRRAA,或者可能是 0xXXRRGGBB?对于白色和黑色并不重要,但对于基本上任何其他颜色,了解这些信息是必要的。 - aroth
1
@Aroth 0xAARRGGBB - Lorne Laliberte

37

以前的答案已经弃用,现在需要使用ContextCompat.getColor来正确地检索颜色:

root.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.white));

2
在 Kotlin 中: root.setBackgroundColor(ContextCompat.getColor(activity?.applicationContext!!, R.color.white)); - TapulaRasa

28
如果您只想使用一些预定义的 Android 颜色,您可以使用 Color.COLOR(其中COLORBLACKWHITERED等):
myView.setBackgroundColor(Color.GREEN);
否则,你可以像其他人建议的那样处理。
myView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.myCustomGreen));

我不建议直接使用十六进制颜色代码。你应该将所有自定义颜色存放在colors.xml文件中。


20

这必须可行:

您必须使用 getResources().getColor(R.color.WHITE) 来获取颜色资源,该资源必须添加在 colors.xml 资源文件中。

View someView = findViewById(R.id.screen);

someView.setBackgroundColor(getResources().getColor(R.color.WHITE));

2

在我的情况下,它没有改变颜色,因为我在xml资源中设置了颜色。

删除设置颜色的那一行后,它在编程上完美地工作了。

这是我在RecyclerView中做的一个例子。

final Drawable drawable = ContextCompat.getDrawable(mContext, R.drawable.ic_icon).mutate();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    holder.image.setBackground(drawable);
} else {
    holder.image.setBackgroundDrawable(drawable);
}

2
如果您将颜色代码保存在values文件夹下的colors.xml中,则应调用以下内容:
root.setBackgroundColor(getResources().getColor(R.color.name));

name 表示你在 <color/> 标签中声明的名称。


1
已经被弃用。 - lionello

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