回答:
はい、API level 26
非推奨です。代わりに、を使用できますprogressBar
。
プログラムで作成するには:
最初にルートレイアウトへの参照を取得します
RelativeLayout layout = findViewById(R.id.display); //specify here Root layout 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);
プログレスバーを非表示にするには
progressBar.setVisibility(View.GONE);
ユーザー操作を無効にするには、次のコードを追加するだけです
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 level 21
progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));
xmlで作成するには:
<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"/>
あなたの活動で
progressBar = (ProgressBar) findViewById(R.id.progressbar);
プログレスバーの表示/非表示は同じです
progressBar.setVisibility(View.VISIBLE); // To show the ProgressBar
progressBar.setVisibility(View.INVISIBLE); // To hide the ProgressBar
これがどのように見えるかのサンプル画像です:
以下の参照コード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);
}
}
出力:
AlertDialog
ここでは使用すべきではありません。
このクラスはAPIレベル26で廃止されました。ProgressDialogはモーダルダイアログであり、ユーザーがアプリと対話することを防ぎます。このクラスを使用する代わりに、アプリのUIに埋め込むことができるProgressBarのような進行状況インジケーターを使用する必要があります。または、通知を使用して、タスクの進行状況をユーザーに通知することもできます。リンク
新しいUI標準のAndroid O
ために廃止されましたGoogle
プログレスバーの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>
進捗ダイアログを表示するコードコード。このコードをコピーしてフラグメントに貼り付けるだけです。
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
private void setDialog(boolean show){
builder.setView(R.layout.progress);
Dialog dialog = builder.create();
if (show)dialog.show();
else dialog.dismiss();
}
次に、progressdialogを表示したいときはいつでもメソッドを呼び出し、それを表示する場合は引数としてtrueを、ダイアログボックスを閉じる場合はfalseを渡します。
this
、次のようにしAlertDialog.Builder builder = new AlertDialog.Builder(this);
ます。正しいコードをコピーしていることを確認してください。
layout_toEndOf
次の理由で削除できませんLinearLayout
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>
次のステップは、ProgressBarでこのレイアウトを表示する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を実装するのはかなり簡単で簡単です。これで、このダイアログボックスをハンドラまたはASyncTaskで表示/閉じることができます。必要に応じて
progress_dialog.show();
してくださいbuilder.show();
。ありがとうございました。
show()
/ dismiss()
に変更しましたが、コードを単純で理解しやすいようにしたい人にとっては混乱を招くため、それを閉じる必要があるbuilder.show()
ので、入れませんでした。dialog.dismiss()
なぜならbuilder.show()
返す AlertDialog
オブジェクト、そして私たちのような、その参照保存する必要がありますAlertDialog dialog = builder.show();
、その後んdialog.dismiss()
、その簡単に持っているbuilder.create()
いくつかで戻りAlertDialog
オブジェクトをし、ダイアログを表示し、非表示にし、そのオブジェクトを使用する
はい、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()
まああなたが本当に彼らの意志に反したいのなら、それでもあなたは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();
}
HideProgress
は何もしません。
ProgressBarはProgressDialogに代わる最良の方法です。操作の進行状況を示すユーザーインターフェイス要素。
詳細については、このGoogleドキュメントを 参照してください。https ://developer.android.com/reference/android/widget/ProgressBar.html
カスタムライブラリをインポートする必要はありません。
私はモダンを使用することを好むAlertDialog
ので、これはこのページでKishan Dongaによって投稿された素晴らしい答えのKotlinバージョンです。
fun setProgressDialog(context:Context, message:String):AlertDialog {
val llPadding = 30
val ll = LinearLayout(context)
ll.orientation = LinearLayout.HORIZONTAL
ll.setPadding(llPadding, llPadding, llPadding, llPadding)
ll.gravity = Gravity.CENTER
var llParam = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT)
llParam.gravity = Gravity.CENTER
ll.layoutParams = llParam
val progressBar = ProgressBar(context)
progressBar.isIndeterminate = true
progressBar.setPadding(0, 0, llPadding, 0)
progressBar.layoutParams = llParam
llParam = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT)
llParam.gravity = Gravity.CENTER
val tvText = TextView(context)
tvText.text = message
tvText.setTextColor(Color.parseColor("#000000"))
tvText.textSize = 20.toFloat()
tvText.layoutParams = llParam
ll.addView(progressBar)
ll.addView(tvText)
val builder = AlertDialog.Builder(context)
builder.setCancelable(true)
builder.setView(ll)
val dialog = builder.create()
val window = dialog.window
if (window != null) {
val layoutParams = WindowManager.LayoutParams()
layoutParams.copyFrom(dialog.window?.attributes)
layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT
layoutParams.height = LinearLayout.LayoutParams.WRAP_CONTENT
dialog.window?.attributes = layoutParams
}
return dialog
}
val dialog = setProgressDialog(this, "Loading..")
dialog.show()
view!!.context
ドキュメントページで述べたように、代替は ProgressBar
です。ProgressDialog
表情を配置することによって、複製することができますProgressBar
にAlertDialog
。
引き続き使用できますが、Androidでは使用を望まないため、非推奨になっています。したがって、をに埋め込むなど、別の方法で問題を解決することを検討する必要ProgressBar
がありますLayout
。
ProgressDialog
APIレベル26で廃止されました。
新しいものに置き換えられる過程にある関数または要素を指します。"Deprecated"
ProgressDialogはモーダルダイアログであり、ユーザーがアプリを操作することを防ぎます。このクラスを使用する代わりに、のような進行状況インジケーターを使用する必要
ProgressBar
があります。これは、アプリのUIに埋め込むことができます。
利点
私は個人的にはそのProgressBar
2つよりも優れていると思います。ProgressBar
操作の進行状況を示すユーザーインターフェイス要素です。中断のない方法でユーザーに進行状況バーを表示します。アプリのユーザーインターフェイスに進行状況バーを表示します。
https://github.com/Q115/DelayedProgressDialogの DelayedProgressDialogを使用します。これはProgressDialogと同じですが、必要に応じて遅延の利点が追加されます。
これを使用することは、Android O以前のProgressDialogに似ています。
DelayedProgressDialog progressDialog = new DelayedProgressDialog();
progressDialog.show(getSupportFragmentManager(), "tag");
私が書いたこのクラスを使用できます。基本機能のみを提供します。完全に機能するProgressDialogが必要な場合は、この軽量ライブラリを使用してください。
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();
注意:あなたは活動のオーバーライドする必要がありますonBackPressed()
Java8実装:
@Override
public void onBackPressed() {
progressDialog.onBackPressed(
() -> {
super.onBackPressed();
return null;
}
);
}
Kotlinの実装:
override fun onBackPressed() {
progressDialog.onBackPressed { super.onBackPressed() }
}
多分このガイドはあなたを助けるかもしれません。
通常、私はインジケーター付きのカスタムAlertDialogを作成することを好みます。アプリビューのカスタマイズなどの問題を解決します。
他の人の役に立つかもしれません。
多くの人気のあるアプリは、ネットワークリクエスト、ファイルの読み込みなどの進行状況を表示するための異なるアプローチを持っています。読み込みスピナーは、読み込まれたコンテンツまたは読み込まれた残りの量を表示しません。UI / UXの観点では悪い不確実な期間があります。多くの人気のあるアプリ(Facebook、Linkedinなど)は、必要最小限のUI表示を最初に表示することでこの問題を解決しました。次に、ロードされたコンテンツが画面に徐々に表示されます。
私は この問題を解決するために私のアプリにきらめきを使いました。
これに関する他の人に有益な良い記事があります
あなたは使用することができますSpotDialogを使用すると、以下のリンクから完全なチュートリアルを見つけることができwasabeefライブラリを使用することにより: