私はProgressDialog
が現在は非推奨であることを確認しました。 ProgressBar
とは別に、その代わりに使用するものは何でしょう。私はAndroidのスタジオバージョン2.3.3を使用しています。
ProgressDialog progressDialog=new ProgressDialog(this);
progressDialog.show();
はい、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.progressBarStyleSmall
をAndroid.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
これが役に立つことを願っています。
このクラスはAPIレベル26で廃止されました。ProgressDialogはモーダルダイアログであり、ユーザーがアプリと対話するのを防ぎます。このクラスを使用する代わりに、ProgressBarのような進行状況インジケーターを使用する必要があります。これはアプリのUIに埋め込むことができます。あるいは、通知を使用してタスクの進行状況をユーザーに知らせることもできます。 リンク
Google
新しいUI標準のため、Android O
で非推奨になりました
プログレスバー用の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を渡します。
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);
}
}
出力:
あなたが本当に彼らの意志に反して行きたがっているのであれば、それでもあなたは 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();
}
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のどちらかで表示/終了することができます。必要に応じて
はい、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()
ProgressBarはProgressDialogの最良の代替品です。操作の進行状況を示すユーザーインターフェイス要素。
詳細については、これを参照してください Googleドキュメント: https://developer.Android.com/reference/Android/widget/ProgressBar.html
ドキュメンテーションページ 代替の で述べたように ProgressBar
です。 ProgressDialog
の外観は、ProgressBar
をAlertDialog
に配置することによって複製できます。
あなたはまだそれを使用することができますが、Androidはあなたがそれを使用することを望んでいません、それがそれが推奨されない理由です。そのため、ProgressBar
をLayout
に埋め込むなど、別の方法で問題を解決することを検討する必要があります。
ProgressDialog
NAME_ はAPIレベル26で非推奨になりました。
新しいものに置き換えられる過程にある機能または要素を参照します。"Deprecated"
ProgressDialogはモーダルダイアログで、ユーザーがアプリと対話するのを防ぎます。このクラスを使用する代わりに、
ProgressBar
NAME_ のような進行状況インジケーターを使用してください。これはアプリのUIに埋め込むことができます。
利点
私は個人的に言うと、ProgressBar
NAME_は2つの.ProgressBar
NAME_の上にEdgeがあるということは、操作の進行状況を示すユーザーインターフェース要素です。プログレスバーをnon-interruptingの方法でユーザに表示します。アプリのユーザーインターフェースにプログレスバーを表示します。
多分これ ガイド はあなたを助けることができる。
通常、私はインディケータ付きのカスタムAlertDialogsを作ることを好みます。アプリビューのカスタマイズなどの問題を解決します。
あなたがこれを使用することができます class 私が書いた。それは基本的な機能だけを提供します。あなたが完全に機能的なProgressDialogが欲しいなら、この軽量の library を使ってください。
次の依存関係を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() }
}
私は https://github.com/Q115/DelayedProgressDialog からDelayedProgressDialogを使用します。
それを使うことは、Android O以前のProgressDialogに似ています。
DelayedProgressDialog progressDialog = new DelayedProgressDialog();
progressDialog.show(getSupportFragmentManager(), "tag");
それは他の人に役立つかもしれません。
多くの人気のあるアプリは、ネットワーク要求、ファイルの読み込みなどの進捗状況を表示するための異なるアプローチを持っています。読み込みスピナーは、どれだけのコンテンツが読み込まれたか、または読み込みの残り時間を表示しません。 UI/UXの観点からすると悪い不確実性の期間があります。多くの人気のあるアプリ(Facebook、Linkedinなど)が最初に素のUIを表示することでこの問題を解決しました。その後、ロードされたコンテンツは徐々に画面に表示されます。
この問題を解決するために、私は自分のアプリに shimmer を使用しました。
他にも良い 記事 これは他の人にとって有益になるでしょう
ライブラリwasabeefを使用すると、 SpotDialog を使用できます。次のリンクから完全なチュートリアルを見つけることができます。
進行状況ダイアログでは、ユーザーはいかなる種類の作業も実行できません。すべてのバックグラウンドプロセスは、進行ダイアログ中に停止します。したがって、進行状況ダイアログではなく、ユーザー進行状況バーを使用することをお勧めします。