Android 4.x 上的自定义警报对话框看起来很奇怪

Custom Alert Dialog looking weird on Android 4.x

我想在我的 Android 应用程序中自定义警报对话框,因此我首先更改了我的应用程序主题的 alertDialogTheme 属性,如下所示:

res/values/themes.xml

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:alertDialogTheme">@style/AlertDialogTheme</item>
    </style>

    <style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"/>
</resources>

只是这样做,我没想到对话框看起来与标准不同,因为新主题 AlertDialogTheme 与其 parent 完全相同。它在 Android Lollipop 上正常工作,但在 Android Kitkat 中,对话框后面出现一个白色矩形。它是这样的:

我做错了什么吗?可能用错了parent?

谢谢!

发生这种情况是因为您使用的是 AlertDialog 而不是相对较新的 AlertDialogCompat。它在所有平台上带来了相同的 Material 设计风格对话框,强烈建议使用它。

要使用它,您必须确保在您的 Gradle 文件中,您的依赖项中包含以下行:

com.android.support:appcompat-v7:24.2.1
(这是最新版本。通过查看 SDK 管理器确保您已更新所有包)。

然后在 Activity 中要显示它的地方,您必须导入 android.support.v7.app.AlertDialog 并像以前一样使用 AlertDialog.Builder。

我使用以下代码修复了它:

 <style name="CustomAppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>
  1. appcompat 依赖项添加到您的构建脚本:

    implementation 'com.android.support:appcompat-v7:27.1.1'

  2. android.app.AlertDialog 的所有用法替换为 android.support.v7.app.AlertDialog

对于那些使用 AndroidX 的用户,您需要使用以下导入:

import androidx.appcompat.app.AlertDialog