ProgressDialog dépréciée : quelle alternative ?

ProgressDialog dépréciée : quelle alternative ? À partir de la version 26 de l'API de développement d'Android, il n'est plus possible d'utiliser la classe "ProcessDialog". Mais il existe une alternative.

À partir de la version 26 de l'API de développement d'Android, il n'est plus possible d'utiliser la classe "ProcessDialog". Cette classe permettait d'afficher une barre de progression pour habiller un temps de chargement dans une application. À la place, il faut maintenant utiliser la classe "ProgressBar". Il est possible de l'implémenter de deux façons : soit entièrement en Java, ou bien avec une balise XML dédiée (à lire aussi : Voici une grille Android basique utilisant RecyclerView avec GridLayoutManager).

Pour ajouter une barre de progression dans votre activité, il faut d'abord obtenir le "layout" qui va la contenir. Pour cela, vous devez utiliser la méthode "findViewById". Vous pouvez en paramètre indiquer le mot-clé "this" ou bien l'identifiant du "layout" principal.

RelativeLayout layout = findViewById(layoutRacine.id.display);
RelativeLayout layout = findViewById(this);

Vous pouvez ensuite instancier la barre de progression. Vous devez lui indiquer en paramètres un contexte, des attributs et des attributs de style.

maBarreDeProgression = new ProgressBar(youractivity.this,null,android.R.attr.progressBarStyleLarge);

Vous pouvez ensuite utiliser la classe "RelativeLayout.LayoutParams" pour paramétrer la barre de progression. Ici on instancie une barre qui prend toute la largeur et la hauteur et qui est centrée.

RelativeLayout.LayoutParams parametres = new RelativeLayout.LayoutParams(100,100);
parametres.addRule(RelativeLayout.CENTER_IN_PARENT);

Il ne reste plus qu'à l'ajouter à votre layout.

layout.addView(maBarreDeProgression, parametres);
// Pour masquer ou afficher la barre, utilisez la méthode "setVisibility".
maBarreDeProgression.setVisibility(View.VISIBLE);  // Affiche la barre de progression
maBarreDeProgression.setVisibility(View.GONE);     // Masque la barre de progression
// Pour empêcher un utilisateur d'interagir avec la barre, ajouter la directive suivante dans votre code :
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
// Le code suivant ajoute la possibilité pour l'utilisateur d'interagir avec la barre de progression.
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

Une autre solution consiste à utiliser une balise XML pour créer la barre de progression. On précise le style d'affichage de la barre avec l'attribut "style". Pour les dimensions, on doit indiquer les valeurs des attributs "android:layout_width" et "android:layout_height". Il existe énormément d'attributs supplémentaires pour paramétrer l'affichage. Vous trouverez la liste sur cette page.

<ProgressBar android:id="@+id/progressbar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:indeterminate="true" android:max="100" android:backgroundTint="@color/white" android:layout_below="@+id/framelauout" android:indeterminateTint="#1a09d6" android:layout_marginTop="-7dp"/>

Pour afficher ou masquer la barre de progression, les méthodes Java sont les mêmes. La seule différence est dans sa récupération. On utilise toujours la méthode "findViewById" mais l'objet retourné n'est pas un "layout" mais directement la barre de progression. On utilise pour cela l'attribut "id.progressbar". Il faut ensuite le convertir.

maBarreDeProgression = (ProgressBar) findViewById(layoutRacine.id.progressbar);
maBarreDeProgression.setVisibility(View.VISIBLE);  //Affiche la barre de progression
maBarreDeProgression.setVisibility(View.GONE);     //Masque la barre de progression

Android