如何为ProgressDialog设置主题?

17

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

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 

如何设置对话框的主题?

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

是否有更简便的方法来设置 progressDialog 的 THEME 和 BACKGROUND 颜色?
为什么我可以访问像 progressDialog.THEME_HOLO_DARK 这样的常量,如果我不能使用它们?


你不能够扩大Progress Dialog UI,但是可以在执行Async Task的时候展示自定义对话框。 - Adil
Adil Mughal,您能否在答案中写下如何仅通过修改主题、背景和圆角来制作自定义进度对话框?我不想触碰ProgressBar... - Marek
@Marek:你不能膨胀Progress Dialog的布局(Adil Mughal上面提到的)。你需要使用自定义对话框(而不是自定义进度对话框)。你可以创建一个简单的对话框并根据需要进行自定义。 - Mahaveer Muttha
4个回答

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

编辑于2016年8月: 关于弃用的主题的评论,您也可以使用styles.xml并继承一个基本主题,例如:

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

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


4
这个主题现在已被弃用,我们还能用什么? - user2520215

14

抱歉..我现在正在工作中,无法提供详细信息,但这是答案。

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

1
感谢 ContextThemeWrapper :) - Ankit Popli

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接