2011-01-21 4 views

ответ

119

Получить дескриптор корневого макета используется, а затем установить цвет фона на этом. Корневая компоновка - это то, что вы назвали 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)); 
+0

Когда я это делаю, Eclipse помещает его в «Должен передать разрешенный цвет вместо идентификатора ресурса здесь: getResources(). GetColor (android.R.color.red)». – joriki

+23

Изменить последнюю строку на 'root.setBackgroundColor (getResources(). GetColor (android.R.color.red));' –

+0

Этот ответ работает; но он по-прежнему не является полностью программным в соответствии с вопросом. Я бы предложил ответить Арункумару ниже. – KVISH

56
?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, который вы хотите изменить.

Если вам нужно динамически обновлять фоновое значение, видит следующее:

Exercise: Change background color, by SeekBar

+1

Вопрос явно спрашивает, как это сделать «на Java» ... –

+0

Mm good point. Ну, независимо от того, ссылка я дал ответы на этот вопрос довольно удобно. – I82Much

+0

Я не знаю, что, но это не сработало! – SJS

64

Я предпочитаю расцветку по теме

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

В чем разница между windowBackground и colorBackground? –

+0

Просто установите windowBackground, и он отлично работает. Какая польза от colorBackground? – codezjx

+3

@ AlikElzin-kilaka: разница в том, что при запуске приложения «андроид: windowBackground» виден сначала, на короткое время, а затем цвет фона макета берет верх. Поэтому, если вы используете два разных цвета, он будет мерцать на экране. – GoTo

196

Добавить одну строку в вашей деятельности, после setContentView() вызова

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

Этот ответ на самом деле более правильный, чем принятый. – EvilDuck

+4

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

+1

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

7

Вы можете использовать эту функцию для вызова предустановленные андроид цвета:

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

Если вы хотите использовать один из своих собственных цветов, вы можете добавить свой собственный цвет в strings.xml, а затем использовать нижеследующее для его вызова.

element.setBackgroundColor(R.color.mycolour); 

Однако, если вы хотите, чтобы установить цвет в вашем layout.xml вы можете изменить и добавить ниже к любому элементу, который принимает его.

android:background="#FFFFFF" 
+0

Если я использую первый метод, я получаю предупреждение о том, что на самом деле его можно получить следующим образом: getResources(). GetColor (android.R.color.black); –

3

Чтобы получить представление корня, определенный в файле XML, без панели действий, вы можете использовать это:

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

Таким образом, чтобы изменить цвет на белый:

root.setBackgroundResource(Color.WHITE); 
+0

Да, это сработало! –

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

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

+0

Этот ответ находится в очереди просмотра сообщений низкого качества, потому что это просто код без объяснений. Пожалуйста, улучшите свой ответ, объяснив, что делает ваш код и как он отвечает на вопрос. Пожалуйста, прочитайте [этот совет, чтобы ответить на вопросы программирования) [http://msmvps.com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx). –

+2

Приятно, что это четко задает фон синему, а не белому по требованию. –

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

В вашем 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)); .

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")); 
     } 
    }); 
} 
Смежные вопросы