Wie kann die Hintergrundfarbe einer Aktivität programmgesteuert auf Weiß gesetzt werden?


Antworten:


142

Holen Sie sich ein Handle für das verwendete Root-Layout und legen Sie die Hintergrundfarbe darauf fest. Das Root-Layout ist das, mit dem Sie setContentView aufgerufen haben.

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

Wenn ich dies tue, kennzeichnet Eclipse es mit "Sollte hier aufgelöste Farbe anstelle der Ressourcen-ID übergeben: getResources (). GetColor (android.R.color.red)".
Joriki

25
Ändern Sie die letzte Zeile inroot.setBackgroundColor(getResources().getColor(android.R.color.red));
Luis Mendo

Diese Antwort funktioniert; aber es ist immer noch nicht vollständig programmatisch, so der Fragesteller. Ich würde Arunkumars Antwort unten vorschlagen.
KVISH

263

Fügen Sie diese einzelne Zeile nach dem setContentView()Anruf in Ihre Aktivität ein

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

4
einverstanden. Dies ändert die Farbe des Fensters, bevor das
Stammlayout

1
Ich denke, dies sollte die richtige sein, wenn Sie nur die Hintergrundfarbe der Aktivität einstellen möchten.
Shanwu

hat meine +1, da es die Farbe des
Stammfensters

Dies ist definitiv die beste Antwort
1QuickQuestion

Dies ist die einfachste Methode dafür. Eigentlich besser als akzeptiert!
Dinith

85

Ich bevorzuge es, nach Themen zu färben

<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
Was ist der Unterschied zwischen windowBackground und colorBackground?
AlikElzin-Kilaka

1
Stellen Sie einfach den windowBackground ein und es funktioniert einwandfrei. Was nützt colorBackground?
Codezjx

8
@ AlikElzin-kilaka: Der Unterschied besteht darin, dass beim Starten der App die android:windowBackgroundfür einen kurzen Moment zuerst sichtbar ist und dann die Layout-Hintergrundfarbe übernimmt. Wenn Sie also zwei verschiedene Farben verwenden, flackert es auf dem Bildschirm.
GoTo

2
windowBackgroundBetrifft nur den Fensterhintergrund, aber auch colorBackgroundalle Ansichten. 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>

Mit anderen Worten, "android: background" ist das Tag in der XML, das Sie ändern möchten.

Wenn Sie den Hintergrundwert dynamisch aktualisieren müssen, gehen Sie wie folgt vor:

Übung: Ändern Sie die Hintergrundfarbe mit SeekBar


Mm guter Punkt. Trotzdem beantwortet der Link, den ich gegeben habe, diese Frage ziemlich einfach.
I82Much

Ich glaube nicht, dass du mir die richtigen Werte für die Farbe gibst !! Ich habe es mit #FFFFFF
SJS

Dies ist eine gute Antwort für diejenigen von uns, die dies in XML tun möchten und über eine Google-Suche hierher gekommen sind.
Kacy

9

In Ihrer onCreate()Methode:

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

Außerdem müssen Sie dem Werteordner eine neue XML-Datei mit dem Namen hinzufügen color.xmlund dort eine neue Farbeigenschaft zuweisen:

color.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="main_activity_background_color">#000000</color>
</resources>

Beachten Sie, dass Sie einen color.xmlbeliebigen Namen benennen können , ihn jedoch mit dem Code als bezeichnen R.color.yourId.

BEARBEITEN

Da ist getResources().getColor()veraltet, verwenden Sie getWindow().getDecorView().setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.main_activity_background_color)); stattdessen.


8

Sie können dies verwenden, um vordefinierte Android-Farben aufzurufen:

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

Wenn Sie eine Ihrer eigenen benutzerdefinierten Farben verwenden möchten, können Sie Ihre benutzerdefinierte Farbe zu strings.xml hinzufügen und dann wie folgt aufrufen.

element.setBackgroundColor(R.color.mycolour);

Wenn Sie jedoch die Farbe in Ihrer layout.xml festlegen möchten, können Sie die folgenden Elemente ändern und zu jedem Element hinzufügen, das sie akzeptiert.

android:background="#FFFFFF"

Wenn ich die erste Technik verwende, erhalte ich eine Warnung, dass tatsächlich wie folgt darauf zugegriffen werden sollte: getResources (). GetColor (android.R.color.black);

3

Um die in Ihrer XML-Datei definierte Stammansicht ohne Aktionsleiste zu erhalten, können Sie Folgendes verwenden:

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

So ändern Sie die Farbe in Weiß:

root.setBackgroundResource(Color.WHITE);

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

arbeitete für mich. Danke.


Diese Antwort befindet sich in der Überprüfungswarteschlange für Posts mit geringer Qualität, da es sich nur um Code ohne Erklärung handelt. Bitte verbessern Sie Ihre Antwort, indem Sie erklären, was Ihr Code tut und wie er die Frage beantwortet. Bitte lesen Sie diesen Rat zur hilfreichen Beantwortung von Programmierfragen .
Adi Inbar

2
Ein bisschen komisch, dass dies den Hintergrund eindeutig auf Blau und nicht auf Weiß setzt, wie gewünscht.
Konrad Lindenbach

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"));
        }
    });
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.