Как программно установить белый цвет фона для 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));
Hamy
источник
Когда я это делаю, Eclipse помечает это как «Должен передать разрешенный цвет вместо идентификатора ресурса: getResources (). GetColor (android.R.color.red)».
joriki
25
Измените последнюю строку наroot.setBackgroundColor(getResources().getColor(android.R.color.red));
Луис Мендо
Этот ответ работает; но, по мнению автора, это все еще не полностью программное обеспечение. Я бы предложил ответ Арункумара ниже.
КВИШ
263

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

getWindow().getDecorView().setBackgroundColor(Color.WHITE);
Arunkumar
источник
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
источник
Мм хорошее замечание. Ну, в любом случае, ссылка, которую я дал, довольно легко отвечает на этот вопрос.
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
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"));
        }
    });
}
Салим Калро
источник