Как программно установить белый цвет фона для Activity?


Ответы:


143

Получите дескриптор используемого корневого макета, затем установите для него цвет фона. Корневой макет - это то, с чем вы вызвали 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 помечает это как «Должен передать разрешенный цвет вместо идентификатора ресурса: getResources (). GetColor (android.R.color.red)».
joriki

25
Измените последнюю строку наroot.setBackgroundColor(getResources().getColor(android.R.color.red));
Луис Мендо

Этот ответ работает; но, по мнению автора, это все еще не полностью программное обеспечение. Я бы предложил ответ Арункумара ниже.
КВИШ

263

Добавьте эту единственную строку в свою деятельность после setContentView()звонка

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

4
согласовано. это изменяет цвет окна до применения корневого макета, принятый ответ изменяет цвет корневого элемента в макете действия
LairdPleng 02

1
Я думаю, этот вариант должен быть правильным, если вы просто хотите установить цвет фона действия.
shanwu

имеет мой +1, поскольку он меняет цвет корневого окна
mparkes

Это определенно лучший ответ
1QuickQuestion

Это самый простой способ сделать это. На самом деле лучше, чем принято!
Динит

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

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


Мм хорошее замечание. Ну, в любом случае, ссылка, которую я дал, довольно легко отвечает на этот вопрос.
I82Much

я не думаю, что вы даете мне правильные значения для цвета !! я получил бы это с #FFFFFF
SJS

Это хороший ответ для тех из нас, кто хочет сделать это в xml и попал сюда через поиск в Google.
Kacy

9

В вашем onCreate()методе:

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

Также вам необходимо добавить в папку значений новый файл XML с именем color.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)); вместо этого.


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

работал у меня. Спасибо.


Этот ответ находится в очереди на просмотр сообщений низкого качества, потому что это просто код без объяснения причин. Пожалуйста, улучшите свой ответ, объяснив, что делает ваш код и как он отвечает на вопрос. Пожалуйста, прочтите этот совет по полезным ответам на вопросы по программированию .
Ади Инбар

2
Довольно забавно, что это явно устанавливает синий фон, а не белый, как просили.
Конрад Линденбах


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"));
        }
    });
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.