Comment centrer facilement l’indicateur de progression dans ProgressDialog (quand aucun titre / texte n’est transmis)

Lors de l’appel progressDialog = ProgressDialog.show(this, null, null, true); En général, les développeurs ne veulent afficher que l’image d’indication de progression et s’attendent généralement à être centrés dans la fenêtre (du moins du sharepoint vue de la conception de l’interface utilisateur). Mais l’image est trop à gauche, il semble qu’un certain remplissage / marge à droite soit toujours calculé pour le texte (facultatif) à droite, bien que nous ne transmettions aucun texte en paramètre. Cela rendrait la vie plus facile pour un développeur 🙂 Nous n’avons donc pas besoin de créer une boîte de dialog personnalisée uniquement pour que l’indicateur de progression soit centré par défaut.

(Je l’ai enregistré en tant que demande de fonctionnalité sur http://code.google.com/p/android/issues/detail?id=9697 ; merci de bien vouloir le voir si vous souhaitez également voir ceci amélioré).

Maintenant mes questions:

  1. Comment puis-je facilement centrer l’image de progression sans avoir à créer entièrement ma propre classe de dialog d’alerte personnalisée? Tout paramètre que j’ai pu ignorer?

  2. En outre, comment définir le fond transparent?

Je me demande aussi à ce sujet: https://stackoverflow.com/questions/2866141/how-to-put-custom-animation-into-a-progressdialog Je ne l’ai pas encore essayé moi-même, mais si vous ne pouvez pas créer de custom les animations, cela signifie que si vous voulez une sorte d’indicateur de progression animé, vous devez toujours étendre la classe ProgressDialog? Cependant, en regardant la classe ProgressDialog, je ne trouve rien d’autre que des tirables normaux ( ProgressDialog.java ), ils n’utilisent pas AnimatedDrawable.

    J’ai fait des tests et j’estime que la meilleure façon d’y parvenir est de créer un Dialog personnalisé.

    Voici un exemple de ce que j’ai fait. Cela répondra à la question numéro 2 mais vous donnera une idée de la manière de résoudre la question numéro 1.

     public class MyProgressDialog extends Dialog { public static MyProgressDialog show(Context context, CharSequence title, CharSequence message) { return show(context, title, message, false); } public static MyProgressDialog show(Context context, CharSequence title, CharSequence message, boolean indeterminate) { return show(context, title, message, indeterminate, false, null); } public static MyProgressDialog show(Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable) { return show(context, title, message, indeterminate, cancelable, null); } public static MyProgressDialog show(Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable, OnCancelListener cancelListener) { MyProgressDialog dialog = new MyProgressDialog(context); dialog.setTitle(title); dialog.setCancelable(cancelable); dialog.setOnCancelListener(cancelListener); /* The next line will add the ProgressBar to the dialog. */ dialog.addContentView(new ProgressBar(context), new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); dialog.show(); return dialog; } public MyProgressDialog(Context context) { super(context, R.style.NewDialog); } } 

    Toutes les méthodes statiques proviennent de ce lien, rien d’étrange, mais la magie se produit dans le constructeur. Vérifiez que je passe en paramètre un style. Ce style est le suivant:

     < ?xml version="1.0" encoding="utf-8"?>    

    Il en résulte un ProgressBar tournant au centre de l’écran. Sans backgroundDim et sans la Dialog de Dialog .

    Manière simple et personnalisable:

    Définir l’animation: (res / drawable / loader_anim.xml)

      

    ou:

       ...  ...  

    ensuite, définissez la disposition: (res / layout / loader.xml)

        

    puis, boîte de dialog de progression de l’instance:

     ProgressDialog dialog; ... dialog = ProgressDialog.show(this,null,null); dialog.setContentView(R.layout.loader); ... process(); ... dialog.dismiss(); 

    Plus d’informations:

    J’utilise ce qui suit, il ne nécessite aucun fichier de mise en page et place une barre de progression de blocage centrée et sans bordure au milieu de l’écran.

     private ProgressDialog progressDialog; setUIToWait(true); ...long process... setUIToWait(false); private void setUIToWait(boolean wait) { if (wait) { progressDialog=ProgressDialog.show(this,null,null); progressDialog.setContentView(new ProgressBar(this)); } else { progressDialog.dismiss(); } } 

    Si vous souhaitez afficher uniquement la barre de progression indéterminée.

     ProgressDialog progressDialog = ProgressDialog.show(this, null, null, true, false); progressDialog.setContentView(R.layout.progress_layout); 

    Et créez un fichier XML de présentation nommé “progress_layout.xml”

     < ?xml version="1.0" encoding="utf-8"?>    

    Juste faire la méthode ci-dessous pour l’obtenir fait

    Dans res-> values-> styles ajoutez le code ci-dessous

      

    Puis créez votre ProgressDialog comme mentionné ci-dessous

     ProgressDialog dialog = new ProgressDialog(ctx, R.style.MyGravity); dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); 
     //create Dialog by using below method @Override protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG1_KEY: { Dialog dialog = new Dialog(this,R.style.NewDialog); dialog.setContentView(R.layout.progress); dialog.setCancelable(true); return dialog; } } return null; } //then in your onCreate () you can call like below @Override public void onCreate(Bundle savedInstatncestate) { final Handler mHandler = new Handler(); showDialog(DIALOG1_KEY); new Thread() { public void run() { try { sleep(3000); Runnable r = new Runnable() { public void run() { //do your background process dismissDialog(DIALOG1_KEY); } }; mHandler.post(r); } catch (Exception e) { } } }.start(); } 

    Vous pouvez toujours append un ProgressBar dans toutes vos activités où vous pourriez vouloir afficher le ProgressDialog centré. Utilisez dans acitivity.xml comme suit:

      

    Dans votre Acitivity.java, utilisez

     ProgressBar bar = new Progress(); bar = (ProgressBar) findViewById(R.id.progressBar); 

    Maintenant, lorsque vous souhaitez afficher la ProgressBar, définissez simplement sa visibilité sur visible et pour annuler, définissez la visibilité sur disparue.

     bar.setVisibility(View.VISIBLE); bar.setVisibility(View.GONE); 

    Utiliser ProgressBar et l’append à LinearLayout a fonctionné dans mon cas comme suit:

     ProgressBar mSpinner = new ProgressBar(this); mSpinner.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); mSpinner.setBackgroundResource(R.drawable.loading_1); mSpinner.setIndeterminate(true); 

    entrer la description de l'image ici