web-dev-qa-db-fra.com

Comment définir le thème sur ProgressDialog?

Je voudrais définir le thème de progressDialog. Pour le créer, j'utilise ce code:

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

Je ne peux pas simplement écrire

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

car la méthode show () est statique et je reçois un avertissement du compilateur. Existe-t-il un moyen d'utiliser les constantes disponibles comme

progressDialog.THEME_HOLO_DARK 

définir le thème du dialogue?

Je voudrais également changer l'arrière-plan de la boîte de dialogue et faire le tour des coins (je ne veux rien changer avec la barre de progression qui se trouve dans progressDialog. Il existe de nombreux didacticiels ici, mais ils décrivent généralement comment créer une nouvelle classe qui étend la classe progressDialog .

Existe-t-il un moyen plus simple de définir la couleur du THÈME et du FOND de progressDialog?
Pourquoi je peux accéder aux constantes comme progressDialog.THEME_HOLO_DARK si je ne peux pas les utiliser?

16
Marek

ProgressDialog.show() sont des méthodes statiques, vous n'avez donc pas une instance de classe de ProgressDialog sur laquelle vous pouvez définir des propriétés.

Pour obtenir une instance 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();

EDIT 8/2016: Concernant les commentaires sur les thèmes obsolètes, vous pouvez également utiliser styles.xml et hériter d'un thème de base, par exemple:

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

les détails sur la façon de procéder sont déjà largement couverts ailleurs, commencez par https://developer.Android.com/guide/topics/ui/themes.html .

L'utilisation de themes et styles.xml est (à mon avis) une solution beaucoup plus propre et plus facile à entretenir que de coder en dur un thème lors de l'instanciation du ProgressDialog, c'est-à-dire de le définir une fois et de l'oublier.

Ensuite, vous pouvez simplement faire

new ProgressDialog(mContext);

et laissez votre thème/style global fournir le style.

28
CSmith

Désolé .. je travaille en ce moment. Je ne peux pas donner tous les détails. Mais voici la réponse.

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();
12
JeffMeJones
dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.item_dialog);
0
hm7

Vous ne pouvez pas gonfler ProgressDialog.

Ce que vous pouvez faire, c'est en faisant une tâche asynchrone, vous pouvez afficher une boîte de dialogue personnalisée que vous pouvez créer en héritant de la classe Dialog.

Voir aussi comment définir l'image d'arrière-plan pour la boîte de dialogue de progression?

0
Adil