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

时间:2015-10-13 20:26:52

标签: android alertdialog android-4.4-kitkat

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

RES /值/的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与其父对象完全相同。它在Android Lollipop上运行正常,但在Android Kitkat中,对话框后面会出现一个白色矩形。这是它的样子:

enter image description here

我做错了吗?也许使用错误的父母?

谢谢!

4 个答案:

答案 0 :(得分:17)

这是因为您使用struct arguments { std::string input1; std::string input2; std::string date; }; bool parse_arguments(int argc, char** argv, arguments& args) { if(argc < 7){ //or set defaults //print usage();//implement return false; } for(int i=1; i<argc;i+=2){ string command = argv[i]; string argument = argv[i+1]; if(command == "--input1"){ args.input1 = argument; } else if(command == "--input2"){ args.input2 = argument; } else if(command == "--date"){ args.date = argument; } else{ std::cerr<<"Unknown argument: " <<command<<std::endl; //print usage(); return false; } } if(args.input1.empty() || args.input2.empty() || args.data.empty()) return false; return true; } int main(int argc, char* argv[]){ arguments args; parse_arguments(argc,argv, args); //now you can use the struct. ... } 而不是相对较新的AlertDialog。这个在所有平台上都提供了相同的Material Design样式对话框,并且非常鼓励使用它。

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

AlertDialogCompat
(这是最新版本。请确保通过查看SDK Manager确保更新了所有软件包。)

然后,在要显示它的Activity中,您必须导入com.android.support:appcompat-v7:24.2.1并完全按照以前的方式使用AlertDialog.Builder。

答案 1 :(得分:2)

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

 <style name="CustomAppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

答案 2 :(得分:0)

  1. 向您的构建脚本添加appcompat依赖项:

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

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

答案 3 :(得分:0)

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

import androidx.appcompat.app.AlertDialog