Android:如何摆脱进度对话框的怪异边框

我已经为进度对话框定制了自定义样式,但它周围有奇怪的边框。

进度对话框

这是主题:

<style name="AppTheme.Dialog" parent="Theme.AppCompat.Light.Dialog"> <item name="colorAccent">@android:color/white</item> <item name="android:textColorPrimary">@android:color/white</item> <item name="android:background">@color/colorPrimaryDark</item> <item name="android:popupBackground">@null</item> </style> 

任何想法为什么有这么奇怪的背景?

Solutions Collecting From Web of "Android:如何摆脱进度对话框的怪异边框"

要删除进度对话框中的彩色或白色边框,请使用定义透明的windowBackground的主题

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

创build对话框时使用这个主题:

 new ProgressDialog(MyActivity.this, R.style.MyDialogTheme); 

这与这个问题有关 。 但是与alert对话相反,对ProgressDialog没有AppCompat支持。 我没有设法解决问题,它可能使用deprected THEME_HOLO_LIGHT

 ProgressDialog dialog= new ProgressDialog(this,ProgressDialog.THEME_HOLO_LIGHT); 

但是你放弃了AppCompat的所有好处(如颜色重音)。

请加:

 your_progress_dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); 

到你的java。

希望这可以帮助!

创造两种风格

1)API级别小于等于19

  <style name="AppAlertTheme19" parent="Theme.AppCompat.Light.Dialog"> <item name="colorAccent">@color/btngreen</item> <item name="android:textColorPrimary">@color/transparent</item> <item name="android:background">@color/transparent</item> <item name="android:windowBackground">@color/transparent</item> <item name="android:popupBackground">@null</item> </style> 

2)API级别大于19

 <style name="AppAlertTheme" parent="Theme.AppCompat.Light.Dialog"> <item name="colorAccent">@color/btngreen</item> <item name="android:textColorPrimary">@color/transparent</item> <item name="android:background">@color/white</item> <item name="android:windowBackground">@color/transparent</item> <item name="android:popupBackground">@null</item> </style> 

3)和init这样的进度视图

 public class ProgressDialogCustom extends ProgressDialog { public ProgressDialogCustom(Context context) { super(context, getStyle()); setMessage("Please Wait ..."); setCancelable(false); } private static int getStyle() { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { return R.style.AppAlertTheme; } else { return R.style.AppAlertTheme19; } } } 

我可能迟迟不回答这个问题,但由于我面临同样的问题,所以我解决了这个问题:
我创造了两种以上棒棒糖的样式,一种在下面。

API级别大于19

 <style name="AppAlertTheme" parent="Theme.AppCompat.Light.Dialog"> <item name="colorAccent">@color/white</item> <item name="android:textColorPrimary">@color/transparent</item> <item name="android:background">@color/blue</item> <item name="android:windowBackground">@color/transparent</item> <item name="android:popupBackground">@null</item> </style> 

API级别小于19

 <style name="AppAlertTheme_api19" parent="android:Theme.Holo.Dialog"> <item name="android:alertDialogStyle">@style/CustomAlertDialogStyle</item> <item name="android:windowBackground">@color/nlue</item> <item name="android:background">@android:color/transparent</item> <item name="android:backgroundDimEnabled">false</item> <item name="android:textColor">@color/white</item> </style> <style name="CustomAlertDialogStyle"> <item name="android:bottomBright">@android:color/transparent</item> <item name="android:bottomDark">@android:color/transparent</item> <item name="android:bottomMedium">@android:color/transparent</item> <item name="android:centerBright">@android:color/transparent</item> <item name="android:centerDark">@android:color/transparent</item> <item name="android:centerMedium">@android:color/transparent</item> <item name="android:fullBright">@android:color/transparent</item> <item name="android:fullDark">@android:color/transparent</item> <item name="android:topBright">@android:color/transparent</item> <item name="android:topDark">@android:color/transparent</item> </style> 

然后使用这个样式如下:

 public int getProgressDailogStyle(){ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { return R.style.AppAlertTheme; } else { return R.style.AppAlertTheme_api19; } } 

最后

  progressDialog = new ProgressDialog(context, getProgressDailogStyle()); 

希望这可以帮助你..