ProgressDialog est déprécié.Qu'est-ce que l'autre à utiliser?

j'ai remarqué que ProgressDialog est maintenant déprécié. Qu'est-ce qui pourrait être utilisé à la place de cela à part ProgressBar . J'utilise android studio version 2.3.3.

ProgressDialog progressDialog=new ProgressDialog(this);
progressDialog.show();
107
demandé sur CopsOnRoad 2017-07-28 15:01:26

15 réponses

Oui, dans API level 26 c'est obsolète, vous pouvez utiliser progressbar .

utiliser ce code pour la création programmatique:

RelativeLayout layout = findViewById(R. id.display); / / specify here Root layout Id

(ou)

RelativeLayout layout = findViewById (this);

progressBar = new ProgressBar(youractivity.this,null,android.R.attr.progressBarStyleLarge);
 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100,100);
 params.addRule(RelativeLayout.CENTER_IN_PARENT);
 layout.addView(progressBar,params);
 progressBar.setVisibility(View.VISIBLE);  //To show ProgressBar
 progressBar.setVisibility(View.GONE);     // To Hide ProgressBar

pour désactiver l'interaction utilisateur, vous avez juste besoin d'ajouter ce qui suit code

getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                           WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

pour récupérer l'interaction de l'utilisateur, vous avez juste besoin d'ajouter le code suivant

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

juste pour référence future, remplacer le android.R.attr.progressBarStyleSmall par android.R.attr.progressBarStyleHorizontal .

ce code inférieur ne fonctionne qu'au-dessus de L'API 21 progressBar.setProgressTintList (ColorStateList.valueOf(de Couleur.Rouge));


Solution 2: Une autre voie

<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"/>

activité.java

progressBar = (ProgressBar) findViewById(R.id.progressbar);
 `progressBar.setVisibility(View.VISIBLE);`// To Show ProgressBar 
 `progressBar.setVisibility(View.INVISIBLE);` //To Hide ProgressBar

pour plus de détails:

1.Référence un

2.Référence Deux

j'espère que cela pourra vous aider.

118
répondu Gowthaman M 2018-05-15 13:15:00

cette classe a été dépréciée au niveau API 26. ProgressDialog est un modal dialogue, qui évite à l'utilisateur d'interagir avec l'application. Plutôt de l'utilisation de cette classe, vous devez utiliser un indicateur de progression comme ProgressBar, qui peut être intégré dans L'interface utilisateur de votre application. Alternativement, vous pouvez utiliser une notification pour informer l'utilisateur de la tâche en cours. lien

c'est déprécié à Android O à cause de Google nouvelle INTERFACE utilisateur standard

23
répondu Oussema Aroua 2017-09-26 12:34:36

Eh bien si vous voulez vraiment aller contre leur volonté, vous pouvez toujours utiliser Sweet Alert Dialog ou en créer un sur votre propre.

progress_dialog_layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TableRow
        android:layout_centerInParent="true"
        android:layout_width="match_parent"
        android:layout_height="64dp" >

        <ProgressBar
            android:id="@+id/progressBar2"
            style="?android:attr/progressBarStyle"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />

        <TextView
            android:gravity="center|left"
            android:id="@+id/textView9"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textColor="@color/black"
            android:textSize="18sp"
            android:text="Downloading data. Please wait.." />
    </TableRow>
</RelativeLayout>

code Java:

AlertDialog b;
AlertDialog.Builder dialogBuilder;

public void ShowProgressDialog() {
dialogBuilder = new AlertDialog.Builder(DataDownloadActivity.this);
LayoutInflater inflater = (LayoutInflater) getSystemService( Context.LAYOUT_INFLATER_SERVICE );
            View dialogView = inflater.inflate(R.layout.progress_dialog_layout, null);
            dialogBuilder.setView(dialogView);
            dialogBuilder.setCancelable(false);
            b = dialogBuilder.create();
            b.show();
        }

        public void HideProgressDialog(){

            b.dismiss();
        }
11
répondu Damindu 2018-03-17 08:35:13

vous pouvez simplement concevoir une interface xml pour votre progressbar et la passer comme une vue à un AlertDialog, puis afficher ou rejeter la boîte de dialogue à tout moment que vous voulez.

progrès".xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:padding="13dp"
    android:layout_centerHorizontal="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ProgressBar
        android:id="@+id/loader"
        android:layout_marginEnd="5dp"
        android:layout_width="45dp"
        android:layout_height="45dp" />
    <TextView
        android:layout_width="wrap_content"
        android:text="Loading..."
        android:textAppearance="?android:textAppearanceSmall"
        android:layout_gravity="center_vertical"
        android:id="@+id/loading_msg"
        android:layout_toEndOf="@+id/loader"
        android:layout_height="wrap_content" />

</LinearLayout>

le code qui affiche le dialogue progress. Copiez ce code et collez votre fragment.

   private void setDialog(boolean show){
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        //View view = getLayoutInflater().inflate(R.layout.progress);
        builder.setView(R.layout.progress);
        Dialog dialog = builder.create();
        if (show)dialog.show();
        else dialog.dismiss();
    }

alors il suffit d'appeler la méthode chaque fois que vous voulez montrer le progressdialog et passer vrai comme argument pour le montrer ou false pour rejeter le dialogue.

11
répondu DevMike 2018-03-17 08:35:53

ProgressBar est la meilleure alternative pour ProgressDialog. Un élément d'interface utilisateur qui indique la progression d'une opération.

pour plus d'informations voir ce Google doc: https://developer.android.com/reference/android/widget/ProgressBar.html

6
répondu Furqan 2018-03-17 08:37:44

peut-être que ce guide pourrait vous aider.

D'habitude je préfère faire des AlertDialogs personnalisés avec des indicateurs. Il résout de tels problèmes comme la personnalisation de la vue de L'application.

3
répondu Dmitry Ushkevich 2017-07-28 12:09:38

vous pouvez utiliser AlertDialog comme ProgressDialog référez-vous ci-dessous le code pour le ProgressDialog . Cette fonction vous devez appeler chaque fois que vous montrez un dialogue de progrès.

Code:

    public void setProgressDialog() {

    int llPadding = 30;
    LinearLayout ll = new LinearLayout(this);
    ll.setOrientation(LinearLayout.HORIZONTAL);
    ll.setPadding(llPadding, llPadding, llPadding, llPadding);
    ll.setGravity(Gravity.CENTER);
    LinearLayout.LayoutParams llParam = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    llParam.gravity = Gravity.CENTER;
    ll.setLayoutParams(llParam);

    ProgressBar progressBar = new ProgressBar(this);
    progressBar.setIndeterminate(true);
    progressBar.setPadding(0, 0, llPadding, 0);
    progressBar.setLayoutParams(llParam);

    llParam = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT);
    llParam.gravity = Gravity.CENTER;
    TextView tvText = new TextView(this);
    tvText.setText("Loading ...");
    tvText.setTextColor(Color.parseColor("#000000"));
    tvText.setTextSize(20);
    tvText.setLayoutParams(llParam);

    ll.addView(progressBar);
    ll.addView(tvText);

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setCancelable(true);
    builder.setView(ll);

    AlertDialog dialog = builder.create();
    dialog.show();
    Window window = dialog.getWindow();
    if (window != null) {
        WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
        layoutParams.copyFrom(dialog.getWindow().getAttributes());
        layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT;
        layoutParams.height = LinearLayout.LayoutParams.WRAP_CONTENT;
        dialog.getWindow().setAttributes(layoutParams);
    }
}

sortie:

enter image description here

3
répondu Kishan Donga 2018-05-29 07:25:14

ProgressDialog a été déprécié au niveau 26 de L'API .

"Deprecated" fait référence aux fonctions ou aux éléments qui sont en voie d'être remplacés par des fonctions plus récentes.

ProgressDialog est un Dialogue modal, qui empêche l'utilisateur d'interagir avec App. Au lieu d'utiliser cette classe, vous doivent utiliser un progrès indicateur comme ProgressBar , qui peut être intégré dans votre application INTERFACE.

avantage

je dirais personnellement que ProgressBar a le bord sur les deux . ProgressBar est un élément d'interface utilisateur qui indique la progression d'une opération. Afficher des barres de progression vers un utilisateur dans un non interruptive . Afficher la barre de progression dans votre application d'interface utilisateur.

2
répondu IntelliJ Amiya 2017-10-06 05:40:39

Oui, ProgressDialog est déprécié mais Dialog ne l'est pas.

vous pouvez gonfler votre propre fichier XML ( contenant une barre de progression et un texte de chargement) dans votre objet de dialogue, puis l'afficher ou le cacher en utilisant les fonctions show() et dismiss() . Voici un exemple (Kotlin):

Classe ProgressDialog :

class ProgressDialog {
companion object {
    fun progressDialog(context: Context): Dialog{
        val dialog = Dialog(context)
        val inflate = LayoutInflater.from(context).inflate(R.layout.progress_dialog, null)
        dialog.setContentView(inflate)
        dialog.setCancelable(false)
        dialog.window!!.setBackgroundDrawable(
                ColorDrawable(Color.TRANSPARENT))
        return dialog
    }
  }
}

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:background="#fff"
android:padding="13dp"
android:layout_height="wrap_content">
<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyle"
    android:layout_width="100dp"
    android:layout_margin="7dp"
    android:layout_height="100dp"
    android:layout_above="@+id/no_jobs_pickups"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_margin="7dp"
    android:layout_toEndOf="@+id/progressBar"
    android:text="Loading..." />
</RelativeLayout>

dans votre code : Il suffit de faire var dialog = ProgressDialog.progressDialog(context)

pour afficher: dialog.show()

à cacher: dialog.dismiss()

2
répondu Han 2018-03-30 11:48:02

cela peut aider d'autres personnes.

beaucoup d'applications populaires ont l'approche différente pour montrer la progression de n'importe quoi comme la demande de réseau, le chargement de fichiers, etc. Charger spinner ne montre pas la quantité de contenu chargé ou restant à charger. Il y a une période d'incertitude qui est mauvais dans la perspective de l'UI/UX. De nombreuses applications populaires (Facebook, Linkedin, etc.) ont résolu ce problème en montrant d'abord les affichages de l'interface utilisateur bare bones. Alors le contenu chargé est progressivement peuplée à l'écran.

j'ai utilisé le shimmer pour mes applications pour résoudre ce problème.

Il y a un bon article à propos de ce qui va être utile pour d'autres personnes

1
répondu Rajesh Khadka 2017-08-24 18:22:05

j'utilise DelayedProgressDialog de https://github.com/Q115/DelayedProgressDialog il fait la même chose que ProgressDialog avec l'avantage supplémentaire d'un retard si nécessaire.

L'utiliser est similaire à ProgressDialog avant Android O:

DelayedProgressDialog progressDialog = new DelayedProgressDialog();
progressDialog.show(getSupportFragmentManager(), "tag");
1
répondu NinjaCowgirl 2017-09-16 02:02:04

ProgressBar est très simple et facile à utiliser, j'ai l'intention de faire la même chose que simple dialogue de progrès. la première étape est que vous pouvez faire la disposition xml de la boîte de dialogue que vous voulez montrer, disons que nous appelons cette disposition

layout_loading_dialog.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="20dp">
    <ProgressBar
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="4"
        android:gravity="center"
        android:text="Please wait! This may take a moment." />
</LinearLayout>

la prochaine étape est de créer AlertDialog qui montrera cette disposition avec ProgressBar

AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setCancelable(false); // if you want user to wait for some process to finish,
builder.setView(R.layout.layout_loading_dialog);
AlertDialog dialog = builder.create();

maintenant tout ce qui reste est afficher et Masquer ce dialogue dans nos évènements de clic comme ceci

progress_dialog.show(); // to show this dialog
progress_dialog.dismiss(); // to hide this dialog

et c'est cela, il devrait fonctionner, comme vous pouvez le voir, il est vraiment simple et facile à mettre en œuvre ProgressBar au lieu de ProgressDialog. maintenant, vous pouvez afficher/supprimer cette boîte de dialogue dans Handler ou ASyncTask, c'est à votre demande

1
répondu Syed Naeem 2018-08-05 12:43:22

vous pouvez utiliser SpotDialog en utilisant la bibliothèque wasabeef vous pouvez trouver le tutoriel complet à partir du lien suivant:

SpotsDialog Exemple dans Android

0
répondu Ahsan Azwar 2018-01-16 11:10:05

vous pouvez utiliser cette classe j'ai écrit. Elle ne dispose que de la base fonction. Si vous souhaitez un ProgressDialog entièrement fonctionnel, puis utiliser ce léger bibliothèque .

Gradle Setup

ajouter la dépendance suivante au module / build.Grad le:

compile 'com.lmntrx.android.library.livin.missme:missme:0.1.5'

Comment l'utiliser?

L'Usage de

est similaire à l'usage d'origine ProgressDialog

ProgressDialog progressDialog = new 
progressDialog(YourActivity.this);
progressDialog.setMessage("Please wait");
progressDialog.setCancelable(false);
progressDialog.show();
progressDialog.dismiss();

NB : vous devez outrepasser l'activité onBackPressed()

Java8 Mise En Œuvre:

@Override
public void onBackPressed() {
    progressDialog.onBackPressed(
            () -> {
                super.onBackPressed();
                return null;
            }
    );
}

Kotlin Mise En Œuvre:

override fun onBackPressed() {
   progressDialog.onBackPressed { super.onBackPressed() }
}
0
répondu Livin Mathew 2018-03-14 15:29:57