web-dev-qa-db-ja.com

ProgressDialogは推奨されていません。

私はProgressDialogが現在は非推奨であることを確認しました。 ProgressBarとは別に、その代わりに使用するものは何でしょう。私はAndroidのスタジオバージョン2.3.3を使用しています。

ProgressDialog progressDialog=new ProgressDialog(this);
progressDialog.show();
147
Sunil P

はい、API level 26では推奨されていません。progressbarを使用できます。

プログラムで作成するためにこのコードを使用してください:

RelativeLayoutレイアウト= findViewById(R.id.display); //ここで指定しますルートレイアウトID

(または)

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

ユーザーの操作を無効にするには、次のコードを追加する必要があります

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

ユーザーの操作を元に戻すには、次のコードを追加する必要があります

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

今後の参照用に、Android.R.attr.progressBarStyleSmallAndroid.R.attr.progressBarStyleHorizontalに変更してください。

この下の行のコードはAPI 21 progressBar.setProgressTintListの上でのみ機能します。


解決策2:もう1つの方法

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

Activity.Java

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

詳細については:

1.ご参考

2.参考2

これが役に立つことを願っています。

151
Gowthaman M

このクラスはAPIレベル26で廃止されました。ProgressDialogはモーダルダイアログであり、ユーザーがアプリと対話するのを防ぎます。このクラスを使用する代わりに、ProgressBarのような進行状況インジケーターを使用する必要があります。これはアプリのUIに埋め込むことができます。あるいは、通知を使用してタスクの進行状況をユーザーに知らせることもできます。 リンク

Google新しいUI標準のため、Android Oで非推奨になりました

26
Oussema Aroua

プログレスバー用のxmlインタフェースを設計してそれをAlertDialogのビューとして渡すだけで、いつでもダイアログを表示したり閉じたりすることができます。

progress.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>

進行状況ダイアログを表示するコードコード。このコードをコピーしてあなたのフラグメントに貼り付けるだけです。

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

次にprogressdialogを表示したいときはいつでもメソッドを呼び出し、それを表示するための引数としてtrueを渡すか、ダイアログを閉じるためにfalseを渡します。

17
DevMike01

AlertDialogを使用することができます。ProgressDialogは、以下のProgressDialogのコードを参照してください。この関数は、進行状況ダイアログを表示するたびに呼び出す必要があります。

コード:

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

出力:

enter image description here

13
Kishan Donga

あなたが本当に彼らの意志に反して行きたがっているのであれば、それでもあなたは Sweet Alert Dialogを使用することができます またはあなた自身で作成することができます。

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>

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
Damindu

ProgressBarはとてもシンプルで使いやすいです、私はこれを単純なプログレスダイアログと同じにするつもりです。最初のステップは、あなたが表示したいダイアログのxmlレイアウトを作ることができるということです。

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>

次のステップはProgressDarでこのレイアウトを表示するAlertDialogを作成することです

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

あとは、このようなクリックイベントでこのダイアログを表示したり隠したりするだけです。

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

ご存知のとおり、ProgressDialogではなくProgressBarを実装するのはごく単純で簡単なことです。これで、このダイアログボックスをHandlerまたはASyncTaskのどちらかで表示/終了することができます。必要に応じて

10
Syed Naeem

はい、ProgressDialogは非推奨ですがDialogはそうではありません。

あなたはあなた自身のXMLファイル(プログレスバーとロードテキストを含む)をあなたのダイアログオブジェクトに膨張させ、それからshow()dismiss()関数を使ってそれを表示したり隠したりすることができます。これは一例です(Kotlin):

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>

あなたのコードの中で :ただvar dialog = ProgressDialog.progressDialog(context)を実行する

表示するには:dialog.show()

非表示にするには:dialog.dismiss()

8
Han

ProgressBarはProgressDialogの最良の代替品です。操作の進行状況を示すユーザーインターフェイス要素。

詳細については、これを参照してください Googleドキュメント: https://developer.Android.com/reference/Android/widget/ProgressBar.html

6
Furqan

ドキュメンテーションページ 代替の で述べたように ProgressBarです。 ProgressDialogの外観は、ProgressBarAlertDialogに配置することによって複製できます。

あなたはまだそれを使用することができますが、Androidはあなたがそれを使用することを望んでいません、それがそれが推奨されない理由です。そのため、ProgressBarLayoutに埋め込むなど、別の方法で問題を解決することを検討する必要があります。

ProgressDialogNAME_ はAPIレベル26で非推奨になりました。

"Deprecated" 新しいものに置き換えられる過程にある機能または要素を参照します。

ProgressDialogはモーダルダイアログで、ユーザーがアプリと対話するのを防ぎます。このクラスを使用する代わりに、 ProgressBarNAME_ のような進行状況インジケーターを使用してください。これはアプリのUIに埋め込むことができます。

利点

私は個人的に言うと、ProgressBarNAME_は2つの.ProgressBarNAME_の上にEdgeがあるということは、操作の進行状況を示すユーザーインターフェース要素です。プログレスバーをnon-interruptingの方法でユーザに表示します。アプリのユーザーインターフェースにプログレスバーを表示します。

3
IntelliJ Amiya

多分これ ガイド はあなたを助けることができる。

通常、私はインディケータ付きのカスタムAlertDialogsを作ることを好みます。アプリビューのカスタマイズなどの問題を解決します。

3

あなたがこれを使用することができます class 私が書いた。それは基本的な機能だけを提供します。あなたが完全に機能的なProgressDialogが欲しいなら、この軽量の library を使ってください。

Gradleセットアップ

次の依存関係をmodule/build.gradleに追加してください。

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

どうやって使うのですか?

使い方はオリジナルのProgressDialogと似ています

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

_ nb _ :アクティビティのonBackPressed()を上書きする必要があります

Java 8の実装

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

コトリンの実装:

override fun onBackPressed() {
   progressDialog.onBackPressed { super.onBackPressed() }
}
  • 完全な実装については サンプルアプリ を参照してください。
  • 完全な文書は ここ で見つけることができます
2
Livin Mathew

私は https://github.com/Q115/DelayedProgressDialog からDelayedProgressDialogを使用します。

それを使うことは、Android O以前のProgressDialogに似ています。

DelayedProgressDialog progressDialog = new DelayedProgressDialog();
progressDialog.show(getSupportFragmentManager(), "tag");
1
NinjaCowgirl

それは他の人に役立つかもしれません。

多くの人気のあるアプリは、ネットワーク要求、ファイルの読み込みなどの進捗状況を表示するための異なるアプローチを持っています。読み込みスピナーは、どれだけのコンテンツが読み込まれたか、または読み込みの残り時間を表示しません。 UI/UXの観点からすると悪い不確実性の期間があります。多くの人気のあるアプリ(Facebook、Linkedinなど)が最初に素のUIを表示することでこの問題を解決しました。その後、ロードされたコンテンツは徐々に画面に表示されます。

この問題を解決するために、私は自分のアプリに shimmer を使用しました。

他にも良い 記事 これは他の人にとって有益になるでしょう

1
Rajesh Khadka

ライブラリwasabeefを使用すると、 SpotDialog を使用できます。次のリンクから完全なチュートリアルを見つけることができます。

AndroidのSpotsDialogの例

0
Ahsan Azwar

進行状況ダイアログでは、ユーザーはいかなる種類の作業も実行できません。すべてのバックグラウンドプロセスは、進行ダイアログ中に停止します。したがって、進行状況ダイアログではなく、ユーザー進行状況バーを使用することをお勧めします。

0
Nevil Ghelani