web-dev-qa-db-fra.com

Changer la couleur de fond d'une boîte de dialogue contextuelle

J'ai écrit un code Android qui affiche une boîte de dialogue contextuelle, mais je souhaite changer la couleur de fond du noir au blanc, puis la couleur de l'écriture.

C'est le code du dialogue: 

mPrefs = PreferenceManager.getDefaultSharedPreferences(this);

    Boolean welcomeScreenShown = mPrefs.getBoolean(welcomeScreenShownPref, false);

    if (!welcomeScreenShown) {


        String whatsNewText = getResources().getString(R.string.Text);
        new AlertDialog.Builder(this).setMessage(whatsNewText).setPositiveButton(
                R.string.ok, new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        }).show();
        SharedPreferences.Editor editor = mPrefs.edit();
        editor.putBoolean(welcomeScreenShownPref, true);
        editor.commit(); // Very important to save the preference
    }
33
Rick

Si vous voulez juste un thème clair et que vous n'êtes pas particulier à propos de la couleur spécifique, vous pouvez passer un identifiant de thème au constructeur AlertDialog.Builder.

AlertDialog.Builder(this, AlertDialog.THEME_HOLO_LIGHT)...

ou

AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT)...
54
Dane White

Pour développer la réponse de @ DaneWhite, vous n'avez pas à vous fier aux thèmes intégrés. Vous pouvez facilement fournir votre propre style:

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="Android:background">@color/myColor</item>
</style>

puis appliquez-le dans le constructeur Builder:

AlertDialog alertDialog = new AlertDialog.Builder(getContext(), R.style.MyDialogTheme)
        ...
        .create();

Cela devrait fonctionner si vous utilisez Android.support.v7.app.AlertDialog ou Android.app.AlertDialog

Cela fonctionne également mieux que la réponse de @ DummyData car vous ne redimensionnez pas la boîte de dialogue. Si vous définissez l'arrière-plan de la fenêtre comme dessinable, vous écrasez certaines informations dimensionnelles existantes et obtenez une boîte de dialogue de largeur différente.

Si vous définissez l'arrière-plan sur le thème et la boîte de dialogue Définir le thème sur, vous obtiendrez une boîte de dialogue colorée à votre guise mais avec la largeur correcte.

63
tir38

_ {Le crédit va à Sushil

Créez votre AlertDialog comme d'habitude:

AlertDialog.Builder dialog = new AlertDialog.Builder(getContext());
Dialog dialog = dialog.create();
dialog.show();

Après en appelant show () dans votre boîte de dialogue, définissez la couleur d'arrière-plan comme suit:

dialog.getWindow().setBackgroundDrawableResource(Android.R.color.background_dark);
26
DummyData

Pour tout dialogue appelé myDialog, après avoir appelé myDialog.show();, vous pouvez appeler:

myDialog.getWindow().getDecorView().getBackground().setColorFilter(new LightingColorFilter(0xFF000000, CUSTOM_COLOR));

CUSTOM_COLOR est au format hexadécimal à 8 chiffres, ex. 0xFF303030. Ici, FF est la valeur alpha et le reste est la valeur de la couleur en hexadécimal.

8
kiko283

Vous pouvez créer un alertDialog personnalisé et utiliser une présentation XML. dans la mise en page, vous pouvez définir la couleur d'arrière-plan et la couleur du texte.

Quelque chose comme ça:

Dialog dialog = new Dialog(this, Android.R.style.Theme_Translucent_NoTitleBar);
LayoutInflater inflater = (LayoutInflater)ActivityName.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_layout,(ViewGroup)findViewById(R.id.layout_root));
dialog.setContentView(view);
2
Sushil

J'ordonne de changer les boutons de dialogue et les couleurs de fond, vous devrez étendre le thème Dialog, par exemple:

<style name="MyDialogStyle" parent="Android:Theme.Material.Light.Dialog.NoActionBar">
    <item name="Android:buttonBarButtonStyle">@style/MyButtonsStyle</item>
    <item name="Android:colorBackground">@color/white</item>
</style>

<style name="MyButtonsStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="Android:textColor">@color/light.blue</item>
</style>

Ensuite, vous devez transmettre ce style personnalisé au générateur de dialogue, par exemple. comme ça:

AlertDialog.Builder(requireContext(), R.style.MyDialogStyle)

Si vous souhaitez modifier la couleur du texte dans la boîte de dialogue, vous pouvez transmettre une vue personnalisée à ce générateur: 

AlertDialog.Builder.setView(View)

ou 

AlertDialog.Builder.setView(@LayoutResource int)
0
marcinP