28

我正在尝试更改ProgressDialog. 我在网上搜索并找到了各种建议(例如如何从对话框中删除边框?),但我无法替换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 补丁相同,我只是更改了颜色。我将非常感谢一些提示我做错了什么。

4

2 回答 2

69

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

第 1 步:定义一个继承自的主题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. 此样式控制问题中黑色区域的外观。

第 2 步:定义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);

结果如下:

样式化进度对话框

相同的过程适用于AlertDialog(它是 的父类ProgressDialog)。

于 2012-11-16T10:50:47.170 回答
-3

你可以试试我的要点。它基本上在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);
   }
}
于 2015-01-22T08:45:28.190 回答