更改构build版本后,Android自定义警报对话框显示错误

我正在开发一个简单的演示。 在这个演示中,我只是创build一个简单的自定义提醒对话框。 它工作正常。

它显示了我在1.6中生成应用程序的完美结果,但是当我将Android版本从1.6更改为2.2时,它显示了意外的结果。 它不显示我显示自定义警报对话框的背景屏幕。

这是我的XML文件。 自定义对话框主题文件

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomDialogTheme" parent="@android:style/AlertDialog"> <item name="android:windowFrame">@null</item> <item name="android:windowContentOverlay">@null</item> <item name="android:backgroundDimEnabled">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> <item name="android:windowAnimationStyle">@android:style/Theme.Dialog</item> </style> </resources> 

这是我的CustomConfirmOkDialog类

 package com.utility.org; import android.app.Activity; import android.app.Dialog; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class CustomConfirmOkDialog extends Dialog implements OnClickListener { private Button okButton = null; private TextView infoText=null,confirmBody=null; private int errorMessage=0; @SuppressWarnings("unused") private Activity activity; public CustomConfirmOkDialog(Activity context,int customdialogtheme,int errorMessage) { super(context,customdialogtheme); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.confirm_ok); this.errorMessage = errorMessage; this.activity = context; initControls(); } private void initControls() { okButton = (Button) findViewById(R.id.ok_button); okButton.setOnClickListener(this); infoText = (TextView)findViewById(R.id.infoText); confirmBody = (TextView)findViewById(R.id.confirmBody); switch (this.errorMessage) { case Utility.INVALID_USERNAME_PASSWORD: try { infoText.setText(R.string.signIn); confirmBody.setText(R.string.invalidUsernameAndPassword); } catch (Exception e) { e.printStackTrace(); } break; default: break; } } public void onClick(View v) { dismiss(); } } 

从我的主要活动使用下面的代码调用这个类。

 CustomConfirmOkDialog dialog = new CustomConfirmOkDialog(MainActivity.this, R.style.CustomDialogTheme, Utility.INVALID_USERNAME_PASSWORD); dialog.show(); 

在这里输入图像说明在这里输入图像说明

在这里您可以清楚地看到1st image显示了背景。 它构build在Android 1.6版本,而2nd image不显示背景。 它显示了整个黑屏。 它构build在Android 2.2版本。 如果有人能解决这个问题,我非常感激。

任何人都可以帮助我解决这个简单而愚蠢的问题?

提前致谢。

它通过更改Custom Dialog Theme xml文件中的以下代码解决了我的问题。

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomDialogTheme" parent="@android:style/Theme.Translucent.NoTitleBar"> <item name="android:windowFrame">@null</item> <item name="android:windowContentOverlay">@null</item> <item name="android:backgroundDimEnabled">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> </style> </resources> 

我也面临同样的问题。 问题是当我调用Dialog类的构造函数

对话框(Context context,int themeId)

它会隐藏背景活动。 我发现唯一的解决scheme是不要调用这个构造函数,而只是调用

对话框(上下文上下文)

并在布局文件中设置你的风格。

所以在你的代码中,只能写

超(上下文)

代替

超级(上下文,主题);

显然,这是一个已知的问题 。

只有当您尝试从框架主题inheritance时才会发生这种情况。 直接使用@android:style将仍然将它们视为非全屏,如预期的穿透黑色背景。

一种解决方法是从几乎空白的主题(如面板或半透明)开始,然后在自己的布局中呈现所需内容(例如对话框边等)。

以为我自己还没有完全理解这个解决scheme。

实际上,我不再确定他们正在谈论你所看到的完全相同的错误,因为他们正在谈论它不适用于sdk的旧版本(不是像你这样的新版本)。 查看错误报告 。