Comment définir la couleur de fond d'une activité en blanc par programme?
Obtenez une poignée pour la mise en page racine utilisée, puis définissez la couleur d'arrière-plan sur celle-ci. La disposition racine est celle avec laquelle vous avez appelé 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));
Ajouter cette seule ligne dans votre activité, après l'appel de setContentView()
getWindow().getDecorView().setBackgroundColor(Color.WHITE);
Je préfère colorier 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>
?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 dans le XML que vous souhaitez modifier.
Si vous devez mettre à jour de manière dynamique la valeur d'arrière-plan, consultez les éléments suivants:
Vous pouvez utiliser cette option pour appeler des couleurs prédéfinies Android:
element.setBackgroundColor(Android.R.color.red);
Si vous souhaitez utiliser l'une de vos couleurs personnalisées, vous pouvez ajouter votre couleur personnalisée à strings.xml, puis utiliser les éléments ci-dessous pour l'appeler.
element.setBackgroundColor(R.color.mycolour);
Toutefois, si vous souhaitez définir la couleur dans votre layout.xml, vous pouvez modifier et ajouter le texte ci-dessous à tout élément qui l'accepte.
Android:background="#FFFFFF"
Dans votre méthode onCreate()
:
getWindow().getDecorView().setBackgroundColor(getResources().getColor(R.color.main_activity_background_color));
Vous devez également ajouter au dossier de valeurs un nouveau fichier XML appelé color.xml
et y attribuer une nouvelle propriété color:
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.xml
comme vous le souhaitez, mais vous le nommez par le code R.color.yourId
.
EDIT
Puisque getResources().getColor()
est obsolète, utilisez plutôt getWindow().getDecorView().setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.main_activity_background_color));
.
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 de couleur en blanc:
root.setBackgroundResource(Color.WHITE);
View randview = new View(getBaseContext());
randview = (View)findViewById(R.id.container);
randview.setBackgroundColor(Color.BLUE);
a travaillé pour moi. Merci.
final View rootView = findViewById(Android.R.id.content);
rootView.setBackgroundResource(...);
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"));
}
});
}
J'avais un problème similaire et j'ai suivi les étapes mentionnées dans les réponses données ci-dessus. Je vais partager ce qui a fonctionné pour moi.
J'utilisais un RecyclerView et j'avais défini une couleur d'arrière-plan pour l'élément. Cependant, il semblait étrange que le nombre d'éléments ne corresponde pas à l'écran
J'ai ensuite utilisé la fonction
public void setActivityBackgroundColor(int color) {
View view = this.getWindow().getDecorView();
view.setBackgroundColor(color);
}
Et appelé la fonction setActivityBackgroundColor(R.color.colorAccent);
dans mon code dans une autre fonction. Cela a conduit à cette mise en page . Assez bizarre.
Je l'ai finalement résolu en suivant ce que KitKat suggéré.
public void setActivityBackgroundColor(int color) {
View view = this.getWindow().getDecorView();
view.setBackgroundResource(color);
}
Ceci finalement le fixe .
EDIT: La solution a commencé à générer une erreur si RecyclerView n’était pas rempli. Dans ce cas, je mets un drapeau pour vérifier si la vue est vide ou non.
public void setActivityBackgroundColor(int color) {
View view = this.getWindow().getDecorView();
if (dataIsNull) {
view.setBackgroundColor(color);
}
else {
view.setBackgroundResource(color);
}
}
Cela fonctionne comme un charme maintenant.
Utilisez ceci :
myActivity.setBackgroundColor(ContextCompat.getColor(this, R.color.colorWhite));