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

128

Wie kann ich die Hintergrundfarbe einer Aktivität programmgesteuert auf Weiß einstellen?

SJS
quelle

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));
Hamy
quelle
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);
Arunkumar
quelle
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>
David
quelle
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

Viel
quelle
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.

Gott
quelle
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"
Luke Alderton
quelle
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);
KitKat
quelle
3
View randview = new View(getBaseContext());
randview = (View)findViewById(R.id.container);
randview.setBackgroundColor(Color.BLUE);

arbeitete für mich. Danke.

Hemal Adani
quelle
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(...);
rds
quelle
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"));
        }
    });
}
Saleem Kalro
quelle