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


Answers:


142

获取所用根布局的句柄,然后在其上设置背景颜色。根布局是您使用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 2013年

25
将最后一行更改为root.setBackgroundColor(getResources().getColor(android.R.color.red));
Luis Mendo

这个答案有效;但是根据发问者的说法,它仍然不是完全编程的。我会在下面建议Arunkumar的答案。
3

263

setContentView()通话后,请在活动中添加这一行

getWindow().getDecorView().setBackgroundColor(Color.WHITE);

4
同意 这会在应用根布局之前更改窗口的颜色,被接受的答案会更改活动布局中根元素的颜色
LairdPleng

1
我想如果您只是想设置活动的背景色,那么这应该是正确的。
shanwu 2014年

我的+1改变了根窗口的颜色
mparkes '16

这绝对是最好的答案
1QuickQuestion '18 -10-14

这是最简单的方法。其实比接受的要好!
迪尼思

85

我更喜欢按主题着色

<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>

22
windowBackground和colorBackground有什么区别?
AlikElzin-kilaka

1
只需设置windowBackground,它就可以正常工作。colorBackground有什么用?
codezjx

8
@ AlikElzin-kilaka:不同之处在于,启动应用程序时,首先android:windowBackground会显示片刻,然后短暂地显示布局背景色。因此,如果使用两种不同的颜色,它将在屏幕上闪烁。
GoTo'Feb

2
windowBackground仅影响窗口背景,但也colorBackground影响所有视图。stackoverflow.com/questions/26266221/…–
fdermishin

60
?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更改背景颜色


嗯,好点。好吧,不管怎么说,我给的链接很容易回答这个问题。
I822011年

我不认为你给我正确的颜色值!我得到了#FFFFFF
SJS

对于那些想在xml中完成并通过Google搜索到达此处的人来说,这是一个很好的答案。
凯西2015年

9

在您的onCreate()方法中:

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

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

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)); 改用。


8

您可以使用它来调用预定义的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);

3

要获得在xml文件中定义的根视图(不带操作栏),可以使用以下命令:

View root = ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);

因此,将颜色更改为白色:

root.setBackgroundResource(Color.WHITE);

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

为我工作。谢谢。


该答案在“低质量帖子”审阅队列中,因为它只是没有解释的代码。请通过解释代码的功能以及代码如何回答问题来改善您的答案。请阅读此建议,以帮助您解答编程问题
Adi Inbar 2014年

2
Kinda有趣的是,这显然将背景设置为蓝色,而不是要求的白色。
Konrad Lindenbach 2014年

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

1
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"));
        }
    });
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.