Як встановити колір тла діяльності на білий програмно?


Відповіді:


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 позначає його "Слід передати вирішений колір замість ідентифікатора ресурсу тут: getResources (). GetColor (android.R.color.red)".
joriki

25
Змінити останній рядок наroot.setBackgroundColor(getResources().getColor(android.R.color.red));
Луїс Мендо

Ця відповідь працює; але це все ще не зовсім програмно, як вважає запитуючий. Я б запропонував відповідь Арункумара нижче.
KVISH

263

Додайте цей єдиний рядок у своїй діяльності після setContentView()дзвінка

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

4
домовились. це змінює колір вікна до того, як буде застосовано макет кореня, прийнята відповідь змінює колір кореневого елемента в макеті діяльності
LairdPleng

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


Мм хороший пункт. Ну незалежно, за посиланням я відповів на це питання досить зручно.
I82Май

я не думаю, що ти даєш мені правильні значення для кольору !! я зрозумів, що це буде з #FFFFFF
SJS

Це хороша відповідь для тих із нас, хто хоче це зробити у xml та потрапив сюди за допомогою google-пошуку.
Кейсі

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.

EDIT

Оскільки 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"));
        }
    });
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.