如何将主题设置为 ProgressDialog?

Posted

技术标签:

【中文标题】如何将主题设置为 ProgressDialog?【英文标题】:How to set theme to ProgressDialog? 【发布时间】:2013-05-30 09:13:14 【问题描述】:

我想设置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 

设置对话框主题?

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

有没有更简单的方法来设置progressDialog的主题和背景颜色? 为什么我不能使用像progressDialog.THEME_HOLO_DARK这样的常量?

【问题讨论】:

您不能膨胀进度对话框 UI,您可以做的是在执行异步任务时,您可以显示自定义对话框 Adil Mughal 能否请您在答案中写下如何仅修改主题、背景和角点来制作 customProgressDialog?我不想触摸 ProgressBar... @Marek:你不能膨胀进度对话框的布局(上面的 Adil Mughal 提到过)你需要使用自定义对话框(不是自定义进度对话框)。您可以创建一个简单的对话框并根据您的要求对其进行自定义。 【参考方案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: 关于不推荐使用的主题的 cmets,您也可以使用 styles.xml 并从基本主题继承,例如:

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

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

使用主题和styles.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();

【讨论】:

感谢 ContextThemeWrapper :)【参考方案3】:

你不能膨胀 ProgressDialog。

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

另见how to set background image for progress dialog?

【讨论】:

【参考方案4】:
dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.item_dialog);

【讨论】:

以上是关于如何将主题设置为 ProgressDialog?的主要内容,如果未能解决你的问题,请参考以下文章

ProgressDialog:如何防止泄漏窗口

ProgressDialog android 如何设置字体大小

ProgressDialog的详细使用总结

返回活动后如何停止progressDialog?

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

如何将多个 cssclass 名称设置为启用 ASP.NET 主题的控件?