如何在程序中将Activity的背景颜色设置为白色?

142

如何通过编程将 Activity 的背景颜色设置为白色?

12个回答

287
在你的 Activity 中,在 setContentView() 调用之后添加这一行代码。
getWindow().getDecorView().setBackgroundColor(Color.WHITE);

6
同意。这会在应用根布局之前更改窗口的颜色,接受的答案则会更改活动布局中根元素的颜色。 - LairdPleng
2
我认为这个应该是正确的,如果你只想设置活动的背景颜色。 - shanwu
有我的 +1,因为它改变了根窗口的颜色。 - mparkes
1
这绝对是最好的答案。 - 1QuickQuestion
这是最简单的方法。实际上比被接受的方法更好! - Dinith
1
这应该是正确的答案。被接受的答案会导致超绘。 - Sotti

149

获取根布局的句柄,然后在其上设置背景颜色。根布局是您使用setContentView指定的任何布局。

 setContentView(R.layout.main);

  // Now get a handle to any View contained 
  // within the main layout you are using
  View someView = findViewById(R.id.randomViewInMainLayout);

  // Find the root view
  View root = someView.getRootView();

  // Set the color
  root.setBackgroundColor(getResources().getColor(android.R.color.red));

当我这样做时,Eclipse会标记它并显示“应该传递已解析的颜色而不是资源ID:getResources().getColor(android.R.color.red)”。 - joriki
28
将最后一行改为root.setBackgroundColor(getResources().getColor(android.R.color.red)); - Luis Mendo
这个答案是可行的,但仍然不完全符合提问者的要求。我建议使用下面Arunkumar的答案。 - KVISH
我认为这个答案不正确。这并没有将颜色设置给活动,而是会导致过度绘制。正确的答案在下面,应该像 window.decorView.setBackgroundColor(getResolvedColor(R.color.your_color)) 这样。 - Sotti

95

我更喜欢按主题着色

<style name="CustomTheme" parent="android:Theme.Light">
    <item name="android:windowBackground">@color/custom_theme_color</item>
    <item name="android:colorBackground">@color/custom_theme_color</item>
</style>

23
windowBackground和colorBackground之间有什么区别? windowBackground指的是窗口或活动背景的颜色或图像,而colorBackground则是视图或布局的背景颜色。 - AlikElzin-kilaka
1
只需设置windowBackground,它就可以正常工作。colorBackground有什么用? - codezjx
9
区别在于当应用程序启动时,android:windowBackground 在一瞬间可见,然后布局背景颜色接管。因此,如果使用两种不同的颜色,屏幕会闪烁。 - GoTo
3
windowBackground 只影响窗口背景,而 colorBackground 则影响所有视图的背景。 - fdermishin

63
?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
android:id="@+id/myScreen"
</LinearLayout>

换句话说,“android:background”是您想要更改的XML标签。

如果您需要动态更新背景值,请参阅以下内容:

演练:通过SeekBar更改背景颜色


好的观点。无论如何,我给出的链接相当完美地回答了那个问题。 - I82Much
我认为你没有给我正确的颜色值!我得到的是 #FFFFFF。 - SJS
这是一个很好的答案,适用于那些想要使用XML并通过谷歌搜索到达此处的人。 - Kacy

11

在你的 onCreate() 方法中:

getWindow().getDecorView().setBackgroundColor(getResources().getColor(R.color.main_activity_background_color));

您需要在values文件夹中添加一个名为color.xml的新XML文件,并在其中分配一个新的颜色属性:

color.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="main_activity_background_color">#000000</color>
</resources>
注意,您可以使用任何名称来命名color.xml,但在代码中引用时应使用R.color.yourId编辑 因为getResources().getColor()已被弃用,请改用getWindow().getDecorView().setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.main_activity_background_color));

这个代码片段几乎按照原样对我有用,但是在浪费了很多时间之后,我发现在我的上下文中,我需要使用以下代码:getWindow().getDecorView().findViewById( android.R.id.content ).setBackgroundColor( backgroundColor ); - BuvinJ

9

您可以使用此功能来调用预定义的Android颜色:

element.setBackgroundColor(android.R.color.red);

如果您想使用自定义颜色之一,可以将其添加到strings.xml中,然后使用下面的代码进行调用。

element.setBackgroundColor(R.color.mycolour);

但是,如果您想在layout.xml中设置颜色,则可以修改并添加下面的内容到任何接受它的元素中。

android:background="#FFFFFF"

如果我使用第一种技术,会收到一个警告,应该像这样访问:getResources().getColor(android.R.color.black); - user470763

4
Button btn;
View root;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn = (Button)findViewById(R.id.button);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            root =findViewById(R.id.activity_main).getRootView();
            root.setBackgroundColor(Color.parseColor("#FFFFFF"));
        }
    });
}

3
为了获取在您的xml文件中定义的根视图,且不包含操作栏,您可以使用以下代码:
View root = ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);

所以,要将颜色更改为白色:

root.setBackgroundResource(Color.WHITE);

2
final View rootView = findViewById(android.R.id.content);
rootView.setBackgroundResource(...);

2
View randview = new View(getBaseContext());
randview = (View)findViewById(R.id.container);
randview.setBackgroundColor(Color.BLUE);

对我有用。谢谢。


此答案在“低质量帖子”审核队列中,因为它只是代码而没有解释。请通过解释您的代码及其如何回答问题来改进您的答案。请阅读有关有益地回答编程问题的建议 - Adi Inbar
3
有点有趣,这显然将背景设为了蓝色而不是所请求的白色。 - Konrad Lindenbach

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