如何将主题设置为ProgressDialog?

时间:2013-06-04 04:43:13

标签: java android themes progress-bar progressdialog

我想设置progressDialog的主题。要创建它,我使用以下代码:

progressDialog = ProgressDialog.show(this, "Please Wait", "Loading dictionary file....", true, false);

我不能只写

progressDialog = new ProgressDialog(...);
progressDialog.(do_sth_with_dialog);
progressDialog.show(...)

因为show()方法是静态的,我得到编译器警告。 有没有办法使用像

这样的常用常量
progressDialog.THEME_HOLO_DARK 

设置对话框主题?

我还想更改Dialog背景并使角落成圆形(我不想使用progressDar中的progressBar更改任何内容。这里有很多教程,但它们通常描述如何创建新的类扩展progressDialog类。

是否有更简单的方法来设置progressDialog的主题和背景颜色?
如果我不能使用它们,为什么我可以访问progressDialog.THEME_HOLO_DARK等常量?

4 个答案:

答案 0 :(得分:28)

ProgressDialog.show()是静态方法,因此您无法获得可以设置属性的ProgressDialog类实例。

获取ProgressDialog实例:

// create a ProgressDialog instance, with a specified theme:    
ProgressDialog dialog = new ProgressDialog(mContext, ProgressDialog.THEME_HOLO_DARK);
// set indeterminate style
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// set title and message
dialog.setTitle("Please wait");
dialog.setMessage("Loading dictionary file...");
// and show it
dialog.show();

编辑8/2016: 关于弃用主题的注释,您也可以使用styles.xml并从基本主题继承,例如:

<style name="MyProgressDialog" parent="Theme.AppCompat.Dialog">
</style>

有关如何执行此操作的详细信息已在其他地方广泛介绍,请从https://developer.android.com/guide/topics/ui/themes.html开始。

使用themes和styles.xml(在我看来)比在实例化ProgressDialog时对主题进行硬编码更简洁,更易于维护,即设置一次并忘记它。

然后你可以做

new ProgressDialog(mContext);

让您的全局主题/风格提供样式。

答案 1 :(得分:11)

抱歉..我现在正在工作。无法提供全部细节。但这是答案。

ProgressDialog progressDialog;

if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){
   progressDialog = new ProgressDialog(new ContextThemeWrapper(context, android.R.style.Theme_Holo_Light_Dialog));
}else{
   progressDialog = new ProgressDialog(context);
}

progressDialog.setMessage("Loading....");
progressDialog.show();

答案 2 :(得分:0)

你不能给ProgressDialog充气。

您可以做的是在执行异步任务时,您可以显示可以通过继承Dialog类创建的自定义对话框。

另见how to set background image for progress dialog?

答案 3 :(得分:0)

dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.item_dialog);