Come impostare il colore di sfondo di un'attività su bianco a livello di codice?


Risposte:


142

Ottieni un handle per il layout di root utilizzato, quindi imposta il colore di sfondo su quello. Il layout di root è quello che hai chiamato 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));

Quando lo faccio, Eclipse lo contrassegna con "Dovrebbe passare il colore risolto anziché l'ID risorsa qui: getResources (). GetColor (android.R.color.red)".
Joriki,

25
Cambia l'ultima riga inroot.setBackgroundColor(getResources().getColor(android.R.color.red));
Luis Mendo il

Questa risposta funziona; ma non è ancora completamente programmatico secondo l'interrogatore. Suggerirei la risposta di Arunkumar di seguito.
KVISH,

263

Aggiungi questa linea singola alla tua attività, dopo la setContentView()chiamata

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

4
concordato. questo cambia il colore della finestra prima dell'applicazione del layout radice, la risposta accettata cambia il colore dell'elemento radice nel layout dell'attività
LairdPleng

1
Penso che questo dovrebbe essere quello corretto, se vuoi solo impostare il colore di sfondo dell'attività.
Shanwu,

ha il mio +1 perché cambia il colore della finestra della radice
mparkes

Questa è sicuramente la risposta migliore
1QuickQuestion

Questo è il metodo più semplice per farlo. In realtà meglio di quello accettato!
Dinith,

85

Preferisco colorare per tema

<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
Qual è la differenza tra windowBackground e colorBackground?
AlikElzin-Kilaka,

1
Basta impostare windowBackground e funziona benissimo. A che serve colorBackground?
codezjx,

8
@ AlikElzin-kilaka: la differenza è che quando l'app viene avviata android:windowBackgroundè visibile per prima, per un breve momento, quindi il colore di sfondo del layout prende il sopravvento. Quindi, se usi due colori diversi, lampeggerà sullo schermo.
Vai al

2
windowBackgroundinfluenza solo lo sfondo della finestra, ma colorBackgroundinfluenza anche tutte le viste. 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>

In altre parole, "android: background" è il tag nell'XML che si desidera modificare.

Se è necessario aggiornare dinamicamente il valore di sfondo, vedere quanto segue:

Esercizio: cambia il colore di sfondo, con SeekBar


Buon punto. Beh, a prescindere, il link che ho dato risponde a questa domanda abbastanza facilmente.
I82 Molto

non credo che tu mi dia i giusti valori per il colore !! l'ho preso con #FFFFFF
SJS il

Questa è una buona risposta per quelli di noi che vogliono farlo in XML e sono arrivati ​​qui tramite una ricerca su Google.
Kacy,

9

Nel tuo onCreate()metodo:

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

Inoltre è necessario aggiungere alla cartella dei valori un nuovo file XML chiamato color.xml e assegnare una nuova proprietà di colore:

color.xml:

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

Nota che puoi nominare color.xmlqualsiasi nome tu voglia ma ti riferisci ad esso come codiceR.color.yourId .

MODIFICARE

Perché getResources().getColor()è deprecato, utilizzare getWindow().getDecorView().setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.main_activity_background_color)); invece.


8

Puoi usarlo per chiamare colori Android predefiniti:

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

Se desideri utilizzare uno dei tuoi colori personalizzati, puoi aggiungere il tuo colore personalizzato a strings.xml e quindi utilizzare il seguente per chiamarlo.

element.setBackgroundColor(R.color.mycolour);

Tuttavia, se si desidera impostare il colore in layout.xml, è possibile modificare e aggiungere quanto segue a qualsiasi elemento che lo accetti.

android:background="#FFFFFF"

Se uso la prima tecnica ricevo un avviso che dovrebbe effettivamente essere accessibile in questo modo: getResources (). GetColor (android.R.color.black);

3

Per ottenere la vista radice definita nel tuo file xml, senza barra delle azioni, puoi usare questo:

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

Quindi, per cambiare il colore in bianco:

root.setBackgroundResource(Color.WHITE);

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

ha funzionato per me. grazie.


Questa risposta è nella coda di revisione dei messaggi di bassa qualità perché è solo un codice senza spiegazioni. Migliora la tua risposta spiegando cosa fa il tuo codice e come risponde alla domanda. Si prega di leggere questo consiglio per rispondere utile alle domande di programmazione .
Adi Inbar,

2
Un po 'strano che questo imposta chiaramente lo sfondo su blu e non bianco come richiesto.
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"));
        }
    });
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.