更改 ProgressDialog 的背景

Posted

技术标签:

【中文标题】更改 ProgressDialog 的背景【英文标题】:Change background of ProgressDialog 【发布时间】:2012-11-01 02:27:37 【问题描述】:

我正在尝试更改ProgressDialog 的背景。我在网上搜索并找到了各种建议(如How to remove border from Dialog?),但我无法替换ProgressDialog的实际背景。相反,我在对话框后面看到了另一个背景(黄色):

我的风格:

<style name="StyledDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@drawable/panel_background</item>
</style>

启动ProgressDialog的代码:

ProgressDialog dialog = new ProgressDialog(this, R.style.StyledDialog);
dialog.setTitle("The title");
dialog.setMessage("The message.");
dialog.show();

drawable 与 SDK 中包含的 9 补丁相同,我只是更改了颜色。我将非常感谢一些提示我做错了什么。

【问题讨论】:

我认为这里的问题是标题、消息和图像有自己的背景设置,而不是在对话框的背景上是透明的。您需要做的是遍历对话框视图的所有子视图并将其背景设置为透明。 【参考方案1】:

Aleks G 的评论(问题下方)指出了正确的方向。对话框的外观由单独的样式 (android:alertDialogStyle) 定义。但是不能将样式直接应用于ProgressDialog。现在,我如何获得黄色背景?

第一步:定义一个继承自Theme.Dialog的主题:

<style name="MyTheme" parent="@android:style/Theme.Dialog">
    <item name="android:alertDialogStyle">@style/CustomAlertDialogStyle</item>
    <item name="android:textColorPrimary">#000000</item>
</style>

在那里,您可以定义诸如整个窗口的背景颜色(问题中的黄色)、字体颜色等。真正重要的是android:alertDialogStyle 的定义。此样式控制问题中黑色区域的外观。

第二步:定义CustomAlertDialogStyle

<style name="CustomAlertDialogStyle">
    <item name="android:bottomBright">@color/yellow</item>
    <item name="android:bottomDark">@color/yellow</item>
    <item name="android:bottomMedium">@color/yellow</item>
    <item name="android:centerBright">@color/yellow</item>
    <item name="android:centerDark">@color/yellow</item>
    <item name="android:centerMedium">@color/yellow</item>
    <item name="android:fullBright">@color/yellow</item>
    <item name="android:fullDark">@color/yellow</item>
    <item name="android:topBright">@color/yellow</item>
    <item name="android:topDark">@color/yellow</item>
</style>

这会将问题中的黑色区域设置为黄色。

第 3 步:将MyTheme 应用于ProgressDialog不是 CustomAlertDialogStyle

ProgressDialog dialog = new ProgressDialog(this, R.style.MyTheme);

结果如下:

同样的过程适用于AlertDialogProgressDialog 的父类)。

【讨论】:

你好啊哈 非常好的答案,但有些边框仍然是黑色的。 你知道如何去除黑边了吗? @ShoebAhmedSiddique 有人在 API 级别 8 上测试过吗?不适合我:'( @lyc001 你需要 dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);或 ​​@android:color/transparent【参考方案2】:

你可以试试我的gist。它基本上在drawable上设置了一个滤色器。

import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.ProgressBar;

public class ColoredProgressBar extends ProgressBar 
   public ColoredProgressBar(Context context) 
      super(context);
      if (!isInEditMode())
         init();
   

   public ColoredProgressBar(Context context, AttributeSet attrs) 
      super(context, attrs);
      if (!isInEditMode())
         init();
   

   public ColoredProgressBar(Context context, AttributeSet attrs, int defStyle) 
      super(context, attrs, defStyle);
      if (!isInEditMode())
         init();
   

   /**
    * Changes color.
    */
   private void init() 
      getIndeterminateDrawable().setColorFilter(Color.BLUE, android.graphics.PorterDuff.Mode.MULTIPLY);
   

【讨论】:

以上是关于更改 ProgressDialog 的背景的主要内容,如果未能解决你的问题,请参考以下文章

创建全局ProgressDialog

ProgressDialog 不显示 [重复]

如何使用暂停和恢复创建 ProgressDialog

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

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

更改 ProgressDialog 的样式