Comment définir la couleur d'arrière-plan d'une activité sur blanc par programmation?

Réponses:

142

Obtenez une poignée de la disposition racine utilisée, puis définissez la couleur d'arrière-plan dessus. La disposition racine est ce que vous avez appelé setContentView avec.

 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
la source
Quand je fais cela, Eclipse le signale avec "Devrait passer la couleur résolue au lieu de l'ID de ressource ici: getResources (). GetColor (android.R.color.red)".
joriki
25
Changer la dernière ligne enroot.setBackgroundColor(getResources().getColor(android.R.color.red));
Luis Mendo
Cette réponse fonctionne; mais ce n'est toujours pas complètement programmatique selon le questionneur. Je suggérerais la réponse d'Arunkumar ci-dessous.
KVISH
263

Ajoutez cette seule ligne dans votre activité, après setContentView()appel

getWindow().getDecorView().setBackgroundColor(Color.WHITE);
Arunkumar
la source
4
D'accord. cela change la couleur de la fenêtre avant que la disposition racine ne soit appliquée, la réponse acceptée change la couleur de l'élément racine dans la disposition de l'activité
LairdPleng
1
Je pense que celui-ci devrait être le bon, si vous souhaitez simplement définir la couleur d'arrière-plan de l'activité.
shanwu
a mon +1 car il change la couleur de la fenêtre racine
mparkes
C'est certainement la meilleure réponse
1QuickQuestion
C'est la méthode la plus simple pour y parvenir. En fait, mieux que l'accepté!
Dinith
85

Je préfère la coloration par thème

<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
la source
22
Quelle est la différence entre windowBackground et colorBackground?
AlikElzin-kilaka
1
Il suffit de définir windowBackground et cela fonctionne très bien. À quoi sert colorBackground?
codezjx
8
@ AlikElzin-kilaka: la différence est que lorsque l'application démarre, elle android:windowBackgroundest visible en premier, pendant un bref instant, puis la couleur d'arrière-plan de la mise en page prend le dessus. Donc, si vous utilisez deux couleurs différentes, cela clignotera sur l'écran.
Aller au
2
windowBackgroundn'affecte que l'arrière-plan de la fenêtre, mais colorBackgroundaffecte également toutes les vues. 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>

En d'autres termes, "android: background" est la balise du XML que vous souhaitez modifier.

Si vous devez mettre à jour dynamiquement la valeur d'arrière-plan, consultez les éléments suivants:

Exercice: changer la couleur d'arrière-plan, par SeekBar

I82Much
la source
Mm bon point. Quoi qu'il en soit, le lien que j'ai donné répond à cette question assez facilement.
I82Much
je ne pense pas que vous me donnez les bonnes valeurs pour la couleur !! je l'ai eu avec #FFFFFF
SJS
C'est une bonne réponse pour ceux d'entre nous qui veulent le faire en xml et qui sont arrivés ici via une recherche Google.
Kacy
9

Dans votre onCreate()méthode:

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

Vous devez également ajouter au dossier des valeurs un nouveau fichier XML appelé color.xmlet y attribuer une nouvelle propriété de couleur:

color.xml:

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

Notez que vous pouvez nommer le color.xmlnom de votre choix, mais vous y faites référence par code comme R.color.yourId.

ÉDITER

Parce que getResources().getColor()c'est obsolète, utilisez à la getWindow().getDecorView().setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.main_activity_background_color)); place.

Dieu
la source
8

Vous pouvez l'utiliser pour appeler des couleurs Android prédéfinies:

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

Si vous souhaitez utiliser l'une de vos propres couleurs personnalisées, vous pouvez ajouter votre couleur personnalisée à strings.xml, puis utiliser ce qui suit pour l'appeler.

element.setBackgroundColor(R.color.mycolour);

Cependant, si vous souhaitez définir la couleur dans votre layout.xml, vous pouvez modifier et ajouter ce qui suit à tout élément qui l'accepte.

android:background="#FFFFFF"
Luke Alderton
la source
Si j'utilise la première technique, j'obtiens un avertissement indiquant qu'elle doit être effectivement accessible comme ceci: getResources (). GetColor (android.R.color.black);
3

Pour obtenir la vue racine définie dans votre fichier xml, sans barre d'action, vous pouvez utiliser ceci:

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

Donc, pour changer la couleur en blanc:

root.setBackgroundResource(Color.WHITE);
KitKat
la source
3
View randview = new View(getBaseContext());
randview = (View)findViewById(R.id.container);
randview.setBackgroundColor(Color.BLUE);

travaillé pour moi. Merci.

Hemal Adani
la source
Cette réponse se trouve dans la file d'attente d'examen des publications de faible qualité, car il ne s'agit que d'un code sans explication. Veuillez améliorer votre réponse en expliquant ce que fait votre code et comment il répond à la question. Veuillez lire ces conseils pour répondre aux questions de programmation de manière utile .
Adi Inbar
2
C'est assez drôle que cela définisse clairement le fond en bleu et non en blanc comme demandé.
Konrad Lindenbach
1
final View rootView = findViewById(android.R.id.content);
rootView.setBackgroundResource(...);
rds
la source
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
la source