更改ProgressDialog的背景

我正在尝试更改ProgressDialog的背景。 我search了networking,发现了各种build议(如如何从对话框中删除边框? ),但我无法取代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(); 

可绘制的是包含在SDK中的相同的9补丁,我只是改变了颜色。 我将不胜感激一些提示,我做错了什么。

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

第1步 :定义从Theme.Dialoginheritance的主题:

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

结果如下:

风格的ProgressDialog

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

你可以试试我的要点 它基本上设置一个可绘制的彩色滤光片。

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