为什么ProgressDialog的背景不能设置为透明?

25

我想将背景设置成透明的,所以我在以下代码中进行了设置

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文件fragment中使用了以下代码所示的 Progressdialog

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

但是我得到的进度条如下图所示,它没有透明背景。

enter image description here

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


5个回答

71

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>

同时在values\styles.xml中添加这个CustomAlertDialogStyle

 <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,很抱歉打扰您,是否有一种通过样式更改进度小部件的方法? - elmorabea
#M D,是否可以将进度条相对于其他元素的位置进行更改?目前它在垂直和水平方向上都是居中对齐的。 - Mohit
@Mohit 我没有尝试过,但你可以在你的样式中设置重力。 - M D
2
尝试过了,但没有成功!除此之外,解决方案很不错。 - Mohit
1
感谢您的阅读。同时您可以在样式中添加以下代码:<item name="android:progressBarStyle">@android:style/Widget.Holo.Light.ProgressBar.Large</item>,以使其变大。 - CoolMind

12

您可以使用此代码,在设备 >=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()。否则,此答案可以正常工作。 - portfoliobuilder
如果你使用ProgressDialog.show(Splash.this, null, null, true),那么你就不需要progress.show()了。否则这个解决方案也可以很好地工作。 - portfoliobuilder

7

试试这个

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

编辑:

尝试将以下内容添加到布局XML中:

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

1
抱歉...它是一样的。但另一个答案有效。同时感谢您的回答。 - Martin

1

只需尝试一下。这对我有效。

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

0
在我的情况下,我只是在 color.xml 中定义变量。
对于浅色主题: <color name="accent_material_light">#000000</color> 对于深色主题: <color name="accent_material_dark">#000000</color> 这些更改会影响整个系统。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接