如何将主题设置为 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?的主要内容,如果未能解决你的问题,请参考以下文章