wake-up-neo.com

Ändern Sie die Hintergrundfarbe eines Popup-Dialogfelds

Ich habe Android-Code geschrieben, der ein Popup-Dialogfeld anzeigt. Ich möchte jedoch die Hintergrundfarbe von Schwarz in Weiß und dann die Farbe der Schrift ändern.

Dies ist der Code des Dialogs: 

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

Wenn Sie nur ein leichtes Thema wünschen und sich nicht genau mit der bestimmten Farbe befassen, können Sie dem AlertDialog.Builder-Konstruktor eine Design-ID übergeben.

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

oder

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

Um die Antwort von @ DaneWhite zu erweitern, müssen Sie sich nicht auf die integrierten Themen verlassen. Sie können ganz einfach Ihren eigenen Stil angeben:

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

und wenden Sie es dann im Builder-Konstruktor an:

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

Dies sollte funktionieren, ob Sie Android.support.v7.app.AlertDialog oder Android.app.AlertDialog verwenden.

Dies funktioniert auch besser als die Antwort von @ DummyData, da Sie die Größe des Dialogfelds nicht ändern. Wenn Sie den Hintergrund des Fensters als Zeichenbar festlegen, überschreiben Sie einige vorhandene Maßinformationen und erhalten ein Dialogfeld, das nicht der Standardbreite entspricht.

Wenn Sie den Hintergrund für das Design festlegen und das Design für das Dialogfeld festlegen, erhalten Sie ein Dialogfeld, das nach Wunsch farbig ist, aber immer noch die richtige Breite hat.

63
tir38

Kredit geht an Sushil

Erstellen Sie Ihren AlertDialog wie gewohnt:

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

After Aufruf von show () in Ihrem Dialog, legen Sie die Hintergrundfarbe wie folgt fest:

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

Für jeden Dialog mit dem Namen myDialog können Sie nach dem Aufruf von myDialog.show(); Folgendes aufrufen:

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

wobei CUSTOM_COLOR im 8-stelligen Hex-Format vorliegt, z. 0xFF303030. Hier ist FF der Alpha-Wert und der Rest der Farbwert in Hex.

8
kiko283

Sie können einen benutzerdefinierten AlertDialog erstellen und ein XML-Layout verwenden. Im Layout können Sie die Hintergrundfarbe und die Textfarbe einstellen.

Etwas wie das:

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

Verwenden Sie das Attribut colorBackgroundFloating, um die Hintergrundfarbe von allen Dialogen und Popups in Ihrer App zu ändern.

<style name="MyApplicationTheme" parent="@style/Theme.AppCompat.NoActionBar">
...
<item name="colorBackgroundFloating">
    @color/background</item>
<item name="Android:colorBackgroundFloating" tools:targetApi="23">
    @color/background</item>
...
</style>

Dokumentation:

colorBackgroundFloating

2
Maksim Ivanov

Um die Dialogschaltflächen und die Hintergrundfarben zu ändern, müssen Sie das Dialogdesign erweitern, z. B .:

<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>

Danach müssen Sie diesen benutzerdefinierten Stil an den Dialog-Builder übergeben, z. so was:

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

Wenn Sie die Farbe des Textes im Dialogfeld ändern möchten, können Sie diesem Generator eine benutzerdefinierte Ansicht übergeben: 

AlertDialog.Builder.setView(View)

oder 

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