如何将主题设置为进度对话框?

我想设置进度对话框的主题。为了创建它,我使用以下代码:

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 

设置对话框主题?

我还想更改对话框背景并使角变圆(我不想使用progressDialog中的进度栏更改任何内容。这里有很多教程,但它们通常描述如何创建扩展 progressDialog 类的新类。

有没有更简单的方法来设置进度日志的主题和背景颜色?
为什么我可以访问像progressDialog.THEME_HOLO_DARK这样的常量,如果我不能使用它们?


答案 1

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:关于已弃用主题的评论,您还可以使用样式.xml并从基本主题继承,例如:

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

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

使用主题和样式.xml(在我看来)比在实例化ProgressDialog时硬编码主题(即设置一次并忘记它)更清晰,更易于维护的解决方案。

然后你可以做

new ProgressDialog(mContext);

并让您的全球主题/样式提供样式。


答案 2

不好意思。。我现在正在工作。无法提供完整的详细信息。但答案是这样的。

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

推荐