Reputation: 4013
I wrote android code that shows a pop-up dialog but I want to change the background color from black to white , and then the color of the writing.
This is the dialog's code:
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
}
Upvotes: 78
Views: 181390
Reputation: 11
Apply this style in
AlertDialog.Builder(this, R.style.PPTCDialog)
and
<style name="PPTCDialog" parent="Theme.MaterialComponents.DayNight.Dialog.Alert">
<item name="android:background">@android:color/white</item>
<item name="android:windowBackground">@android:color/white</item>
</style>
Upvotes: 1
Reputation: 1
alertDialog.getWindow().setBackgroundDrawable(contex.getDrawable(R.drawable.container_dialog));
Upvotes: -1
Reputation: 490
You can create a shape XML in drawable
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white" />
</shape>
Add this line after creating an alert dialog
alertDialog.getWindow().setBackgroundDrawable(ContextCompat.getDrawable(ATextActivity.this,R.drawable.color_drawable));
If you do not want to create XML you can try this below code
Create a drawable of color
ColorDrawable colorDrawable = new ColorDrawable(ContextCompat.getColor(this, R.color.white));
alertDialog.getWindow().setBackgroundDrawable(colorDrawable);
Upvotes: 1
Reputation: 364928
With the Material Components Library you can just use the default MaterialAlertDialogBuilder
:
new MaterialAlertDialogBuilder(AlertDialogActivity.this,
R.style.ThemeOverlay_MaterialComponents_MaterialAlertDialog_Background)
.setTitle("Dialog")
.setMessage("Message... ....")
.setPositiveButton("Ok", /* listener = */ null)
.show();
where the theme overlay ThemeOverlay_MaterialComponents_MaterialAlertDialog_Background
is:
<!-- Alert Dialog -->
<style name="ThemeOverlay.MaterialComponents.MaterialAlertDialog_Background" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
<!-- Background Color-->
<item name="android:background">@color/.....</item>
<!-- Text Color for title and message -->
<item name="colorOnSurface">@color/......</item>
<!-- Style for positive button -->
<item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
<!-- Style for negative button -->
<item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
</style>
<style name="PositiveButtonStyle" parent="@style/Widget.MaterialComponents.Button">
<!-- text color for the button -->
<item name="android:textColor">@color/.....</item>
<!-- Background tint for the button -->
<item name="backgroundTint">@color/primaryDarkColor</item>
</style>
Upvotes: 26
Reputation: 4331
To change the background color of all dialogs and pop-ups in your app, use colorBackgroundFloating
attribute.
<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>
Documentation:
Upvotes: 33
Reputation: 10451
To expand on @DaneWhite's answer, you don't have to rely on the built-in themes. You can easily supply your own style:
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:background">@color/myColor</item>
</style>
and then apply it in the Builder constructor:
Java:
AlertDialog alertDialog = new AlertDialog.Builder(getContext(), R.style.MyDialogTheme)
...
.create();
Kotlin:
var alertDialog = AlertDialog.Builder(context, R.style.MyDialogTheme)
...
.create()
This should work whether you are using android.support.v7.app.AlertDialog
or android.app.AlertDialog
This also works better than @DummyData's answer because you don't resize the dialog. If you set window's background drawable you overwrite some existing dimensional information and get a dialog that is not standard width.
If you set background on theme and the set the theme on dialog you'll end up with a dialog that is colored how you want but still the correct width.
Upvotes: 131
Reputation: 106
I order to change the dialog buttons and background colors, you will need to extend the Dialog theme, eg.:
<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>
After that, you need to pass this custom style to the dialog builder, eg. like this:
AlertDialog.Builder(requireContext(), R.style.MyDialogStyle)
If you want to change the color of the text inside the dialog, you can pass a custom view to this Builder:
AlertDialog.Builder.setView(View)
or
AlertDialog.Builder.setView(@LayoutResource int)
Upvotes: 3
Reputation: 6928
Use setInverseBackgroundForced(true)
on the alert dialog builder to invert the background.
Upvotes: -2
Reputation: 530
For any dialog called myDialog
, after calling myDialog.show();
you can call:
myDialog.getWindow().getDecorView().getBackground().setColorFilter(new LightingColorFilter(0xFF000000, CUSTOM_COLOR));
where CUSTOM_COLOR
is in 8-digit hex format, ex. 0xFF303030
. Here, FF
is the alpha value and the rest is the color value in hex.
Upvotes: 16
Reputation: 682
Credit goes to Sushil
Create your AlertDialog as usual:
AlertDialog.Builder dialog = new AlertDialog.Builder(getContext());
Dialog dialog = dialog.create();
dialog.show();
After calling show() on your dialog, set the background color like this:
dialog.getWindow().setBackgroundDrawableResource(android.R.color.background_dark);
Upvotes: 53
Reputation: 8488
You can create a custom alertDialog and use a xml layout. in the layout, you can set the background color and textcolor.
Something like this:
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);
Upvotes: 4
Reputation: 3552
If you just want a light theme and aren't particular about the specific color, then you can pass a theme id to the AlertDialog.Builder constructor.
AlertDialog.Builder(this, AlertDialog.THEME_HOLO_LIGHT)...
or
AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT)...
Upvotes: 65