我想在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中,对话框后面会出现一个白色矩形。这是它的样子:
我做错了吗?也许使用错误的父母?
谢谢!
答案 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)
向您的构建脚本添加appcompat
依赖项:
implementation 'com.android.support:appcompat-v7:27.1.1'
将android.app.AlertDialog
的所有用法替换为android.support.v7.app.AlertDialog
。
答案 3 :(得分:0)
对于使用AndroidX的用户,您需要使用以下导入:
import androidx.appcompat.app.AlertDialog