为啥 ProgressDialog 的背景没有设置为透明?

Posted

技术标签:

【中文标题】为啥 ProgressDialog 的背景没有设置为透明?【英文标题】:Why the background of ProgressDialog doesn't set to the transparent?为什么 ProgressDialog 的背景没有设置为透明? 【发布时间】:2014-03-24 07:34:09 【问题描述】:

我想将背景设置为透明,所以我在

中设置了如下代码
styles.xml
<style name="dialog" parent="@android:style/Theme.Dialog">  
            <item name="android:windowFrame">@null</item>  
            <item name="android:windowIsFloating">true</item>  
            <item name="android:windowContentOverlay">@null</item>  
            <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>  
            <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>  
            <item name="android:windowBackground">@android:color/transparent</item>  
            <item name="android:windowNoTitle">true</item> 
        </style> 

我已经在JAVA filefragment 中使用了Progressdialog,就像下面的代码一样。

Activity activity = getActivity() ;
mProgressDialog = new ProgressDialog(activity,R.style.dialog) ;
mProgressDialog.setCancelable(false) ;
mProgressDialog.show() ;

但是我得到了如下图的进度,并且它没有透明背景。

为什么背景没有变成透明的?

【问题讨论】:

Create a progressDialog only with the spinner (in the middle)的可能重复 【参考方案1】:

values\styles.xml 中创建自定义MyTheme

<style name="MyTheme" parent="android:Theme.Holo.Dialog">
    <item name="android:alertDialogStyle">@style/CustomAlertDialogStyle</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:textColorPrimary">#FFFFFF</item>
     <item name="android:backgroundDimEnabled">false</item>
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textSize">12sp</item>
</style>

并且还将这个CustomAlertDialogStyle添加到values\styles.xml

 <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>

并设置ProgressDialog 喜欢:

 pd = new ProgressDialog(getActivity(),R.style.MyTheme);
 pd.setCancelable(false);
 pd.setProgressStyle(android.R.style.Widget_ProgressBar_Small);
 pd.show();

【讨论】:

@Simple Plan ,很抱歉打扰您,但是有没有办法通过样式更改进度小部件? #M D,是否可以更改其(进度条)相对于其他元素的位置?目前它的中心垂直和水平对齐。 @Mohit 我没有尝试这个,但你可以按照自己的风格设置重力。 试过但没有成功!除此之外,很好的解决方案。 谢谢。您也可以在样式中添加以下行:@android:style/Widget.Holo.Light.ProgressBar.Large 以使其变大。【参考方案2】:

您可以使用此代码,在设备 >= 19 (Kitkat) 中正常工作

progress = ProgressDialog.show(Splash.this, null, null, true);
            progress.setContentView(R.layout.elemento_progress_splash);
            progress.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

            //progress.show();

【讨论】:

如果执行 ProgressDialog.show(),则不需要调用 progress.show()。否则,这个答案可以正常工作。 如果你执行 ProgressDialog.show(Splash.this, null, null, true) 你不必执行 progress.show()。否则,此解决方案效果很好。【参考方案3】:

试试这个

mProgressDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

编辑:

尝试将其添加到布局 xml

        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:background">@android:color/transparent</item>

【讨论】:

对不起...是一样的。但另一个答案是有效的。也感谢您的回答。【参考方案4】:

试试这个。它对我有用。

styles.xml

<style name="TransparentProgressDialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:background">@android:color/transparent</item>

  </style>

Activity/Fragment:

ProgressDialog pDialog = new ProgressDialog(this, R.style.TransparentProgressDialog);

【讨论】:

【参考方案5】:

就我而言,我只是在 color.xml 中定义变量

对于浅色风格: &lt;color name="accent_material_light"&gt;#000000&lt;/color&gt;

对于深色风格: &lt;color name="accent_material_dark"&gt;#000000&lt;/color&gt;

这些变化会影响整个系统

【讨论】:

以上是关于为啥 ProgressDialog 的背景没有设置为透明?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中禁用 ProgressDialog/AlertDialog 的背景暗淡

为啥网页的背景颜色都没有了

如何将主题设置为 ProgressDialog?

为div设置背景图片后,为啥不显示背景图片?

我在外层div里面已经设置了背景颜色为白色,为啥里面的div撑开后,ie8显示的时候背景颜色没有了!

ProgressDialog的详细使用总结