66

我编写了显示弹出对话框的 android 代码,但我想将背景颜色从 black 更改为 white ,然后是文字的颜色。

这是对话框的代码:

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

10 回答 10

115

要扩展@DaneWhite 的答案,您不必依赖内置主题。您可以轻松提供自己的风格:

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

然后在 Builder 构造函数中应用它:

爪哇:

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

科特林:

var alertDialog = AlertDialog.Builder(context, R.style.MyDialogTheme)
        ...
        .create()

无论您是使用android.support.v7.app.AlertDialog还是android.app.AlertDialog

这也比@DummyData 的答案更好,因为您不调整对话框的大小。如果您设置窗口的背景可绘制对象,则会覆盖一些现有的尺寸信息并获得一个非标准宽度的对话框。

如果您在主题上设置背景并在对话框上设置主题,您最终会得到一个对话框,该对话框的颜色是您想要的颜色,但宽度仍然正确。

于 2016-05-24T20:09:03.883 回答
65

如果您只想要一个浅色主题并且不特别关注特定颜色,那么您可以将主题 id 传递给 AlertDialog.Builder 构造函数。

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

或者

AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT)...
于 2013-08-21T03:41:44.490 回答
47

归功于Sushil

像往常一样创建您的 AlertDialog:

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

对话框上调用 show() 后,设置背景颜色如下:

dialog.getWindow().setBackgroundDrawableResource(android.R.color.background_dark);
于 2016-04-02T16:09:42.797 回答
22

要更改应用程序中所有对话框和弹出窗口的背景颜色,请使用colorBackgroundFloating属性。

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

文档:

颜色背景浮动

于 2019-04-15T08:54:40.727 回答
17

使用材料组件库,您可以只使用默认值MaterialAlertDialogBuilder

    new MaterialAlertDialogBuilder(AlertDialogActivity.this,
        R.style.ThemeOverlay_MaterialComponents_MaterialAlertDialog_Background)
        .setTitle("Dialog")
        .setMessage("Message...  ....")
        .setPositiveButton("Ok", /* listener = */ null)
        .show();

主题覆盖在哪里ThemeOverlay_MaterialComponents_MaterialAlertDialog_Background

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

在此处输入图像描述

于 2019-09-23T19:25:37.973 回答
15

对于任何调用的对话框myDialog,调用后myDialog.show();您可以调用:

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

其中CUSTOM_COLOR是 8 位十六进制格式,例如。0xFF303030. 这里,FF是 alpha 值,其余的是十六进制的颜色值。

于 2017-02-22T00:23:00.487 回答
3

您可以创建自定义 alertDialog 并使用 xml 布局。在布局中,可以设置背景颜色和文本颜色。

像这样的东西:

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);
于 2013-08-21T00:22:42.233 回答
1

我为了更改对话框按钮和背景颜色,您需要扩展对话框主题,例如:

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

之后,您需要将此自定义样式传递给对话框构建器,例如。像这样:

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

如果要更改对话框内文本的颜色,可以将自定义视图传递给此 Builder:

AlertDialog.Builder.setView(View)

或者

AlertDialog.Builder.setView(@LayoutResource int)
于 2019-01-11T14:32:12.807 回答
-2

在警报对话框生成器上使用setInverseBackgroundForced(true)以反转背景。

于 2013-08-21T00:21:36.570 回答
-5

仅更新您的导入。

import android.app.AlertDialog;

import android.support.v7.app.AlertDialog;

它将被修复。

于 2018-01-10T04:57:54.593 回答