如何更改Android警报对话框的背景?

Alp*_*rae 19 android background dialog

我在我的应用程序中使用AlertDialog类.默认情况下,这些警报对话框具有透明背景.我试图使用不透明的背景,非常不成功.这些是我的风格:

<style name="MyOpaqueActivity" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@drawable/my_background</item>
    <item name="android:alertDialogStyle">@style/MyOpaqueAlertDialog</item>
</style>

<style name="MyOpaqueAlertDialog" parent="@android:style/Theme.Dialog.Alert">
    <item name="android:background">#454545</item>
    <item name="android:windowBackground">@drawable/my_background</item>
    <item name="android:popupBackground">@drawable/my_background</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我成功地为整个活动应用了"MyOpaqueActivity"样式(窗口背景更改为"my_background"),但它不适用于这些活动中的警报对话框."alertDialogStyle"属性和我的"MyOpaqueAlertDialog"样式似乎没有任何效果.

那么如何更改这些警报对话框的背景呢?

kip*_*edy 11

你的方法不起作用.看起来AlertDialog(和Builder)硬编码主题并且不会在任何地方尊重alertDialogStyle:

protected AlertDialog(Context context) {
    this(context, com.android.internal.R.style.Theme_Dialog_Alert);
}

public Builder(Context context) {
    this(context, com.android.internal.R.style.Theme_Dialog_Alert);
}
Run Code Online (Sandbox Code Playgroud)

他们在这里得出了同样的结论.

从AlertDialog派生的自定义对话框类调用受保护的构造函数AlertDialog(context,R.style.MyOpaqueAlertDialog)将是一种变通方法.

在最新的android源代码中,AlertDialog.Builder有一个新的公共构造函数,它接受一个主题参数.不幸的是,它尚未发布(也许在姜饼?).