前回は「円」のProgressDialogをご紹介しました。今回は「バー」のProgressDialogです。
画面レイアウトは前回と同じです。
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/start_btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Start ProgressDialog" /> </LinearLayout>
ProgressDialogTest1cActivity.java
package jp.co.triware.samples.ProgressDialogTest1c; import android.app.Activity; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class ProgressDialogTest1cActivity extends Activity { private ProgressDialog mProgressDialog = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btnStart = (Button)findViewById(R.id.start_btn); btnStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // プログレスダイアログを生成 mProgressDialog = new ProgressDialog(ProgressDialogTest1cActivity.this); // タイトルを設定 mProgressDialog.setTitle("ProgressDialog (Progress)"); // スタイルをプログレスバーに設定 mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // メッセージを設定 mProgressDialog.setMessage("しばらくお待ちください..."); // Backボタンによるキャンセル可 mProgressDialog.setCancelable(true); // ボタンを設定(ボタンクリックでダイアログキャンセル) mProgressDialog.setButton(ProgressDialog.BUTTON_POSITIVE, "Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 既に閉じられている場合は何もしない if (mProgressDialog == null) { return; } // ダイアログキャンセル処理呼出 mProgressDialog.cancel(); } }); // キャンセル時に呼び出されるリスナーを設定 mProgressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // 既に閉じられている場合は何もしない if (mProgressDialog == null) { return; } // ダイアログキャンセル時の処理 Toast.makeText(getApplicationContext(), "Cancelled.", Toast.LENGTH_SHORT).show(); mProgressDialog = null; } }); // ダイアログ終了時に呼び出されるリスナーを設定 mProgressDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { // 既に閉じられている場合は何もしない if (mProgressDialog == null) { return; } // ダイアログ終了時の処理 Toast.makeText(getApplicationContext(), "Done.", Toast.LENGTH_SHORT).show(); mProgressDialog = null; } }); // プログレスバーの最大値を設定 mProgressDialog.setMax(100); // ダイアログ表示 mProgressDialog.show(); // ダイアログ表示中の処理(別スレッドで実行) (new Thread(runnable)).start(); } }); } // 1秒毎に進捗状況を更新する(10秒間) private Runnable runnable = new Runnable() { @Override public void run() { try { // テストのために、ダイアログを表示してから処理を開始するようにウェイト Thread.sleep(1000); } catch (InterruptedException e) { ; } // 既に閉じられている場合は何もしない if (mProgressDialog == null) { return; } // プログレスバーの初期値を設定 mProgressDialog.setProgress(0); // プログレスバー更新 for (int i = 0; i < 10; i ++) { try { Thread.sleep(1000); } catch (InterruptedException e) { ; } if (mProgressDialog == null) { // 既に閉じられている場合はループ脱出 break; } // プログレスバーを10ずつ増やす mProgressDialog.incrementProgressBy(10); } if (mProgressDialog != null) { // 閉じられていなければダイアログを閉じる mProgressDialog.dismiss(); } } }; }
28行目のmProgressDialog.setProgressStyle()でProgressDialogの種類(STYLE_HORIZONTAL)を指定しています。
進捗状況は百分率(パーセンテージ)と分数(m/n)の形で表示します。10段階の処理であれば最大値を10に、4段階の処理であれば最大値に4をセットします。百分率と同じく100をセットしてもかまいません。処理に応じて分母を決め、処理が完了した時点で分子をセットしていきます。最大値(分母)はsetMax()メソッドで設定します(最大10,000)。進捗状況(分子)はsetProgress()メソッドで直接値をセットします。また一定間隔ごとに増加させるにはincrementProgressBy()メソッドを使用します。
このサンプルプログラムでは、96行目で初期化するためにsetProgress()を、109行目でincermentProgressBy()を使って、進捗状況をセットしています。
また、「Cancel」ボタンを作成し、キャンセル処理を実行するようにしました。
実行結果
「0% 0/100」から始まり、20%の時点でバーと「20/100」を表示します。
100%まで進むと"Done."のToast表示を実行し、「Cancel」ボタンクリック時には"Cancelled."をToast表示します。
ProgressDialogTest1d.java
package jp.co.triware.samples.ProgressDialogTest1d; import android.app.Activity; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class ProgressDialogTest1dActivity extends Activity { private ProgressDialog mProgressDialog = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btnStart = (Button)findViewById(R.id.start_btn); btnStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // プログレスダイアログを生成 mProgressDialog = new ProgressDialog(ProgressDialogTest1dActivity.this); // タイトルを設定 mProgressDialog.setTitle("ProgressDialog (Secondary)"); // スタイルをプログレスバーに設定 mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // メッセージを設定 mProgressDialog.setMessage("しばらくお待ちください..."); // Backボタンによるキャンセル可 mProgressDialog.setCancelable(true); // ボタンを設定(ボタンクリックでダイアログキャンセル) mProgressDialog.setButton(ProgressDialog.BUTTON_POSITIVE, "Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 既に閉じられている場合は何もしない if (mProgressDialog == null) { return; } // ダイアログキャンセル処理呼出 mProgressDialog.cancel(); } }); // キャンセル時に呼び出されるリスナーを設定 mProgressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // 既に閉じられている場合は何もしない if (mProgressDialog == null) { return; } // ダイアログキャンセル時の処理 Toast.makeText(getApplicationContext(), "Cancelled.", Toast.LENGTH_SHORT).show(); mProgressDialog = null; } }); // ダイアログ終了時に呼び出されるリスナーを設定 mProgressDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { // 既に閉じられている場合は何もしない if (mProgressDialog == null) { return; } // ダイアログ終了時の処理 Toast.makeText(getApplicationContext(), "Done.", Toast.LENGTH_SHORT).show(); mProgressDialog = null; } }); // プログレスバーの最大値を設定 mProgressDialog.setMax(500); // ダイアログ表示 mProgressDialog.show(); // ダイアログ表示中の処理(別スレッドで実行) (new Thread(runnable)).start(); } }); } // 1秒毎に進捗状況を更新する(10秒間) private Runnable runnable = new Runnable() { @Override public void run() { try { // テストのために、ダイアログを表示してから処理を開始するようにウェイト Thread.sleep(1000); } catch (InterruptedException e) { ; } // 既に閉じられている場合は何もしない if (mProgressDialog == null) { return; } // プログレスバーの初期値を設定 mProgressDialog.setProgress(0); mProgressDialog.setSecondaryProgress(50); // プログレスバー更新 for (int i = 0; i < 10; i ++) { try { Thread.sleep(1000); } catch (InterruptedException e) { ; } if (mProgressDialog == null) { // 既に閉じられている場合はループ脱出 break; } // プログレスバーを50ずつ増やす mProgressDialog.incrementProgressBy(50); mProgressDialog.incrementSecondaryProgressBy(50); } if (mProgressDialog != null) { // 閉じられていなければダイアログを閉じる mProgressDialog.dismiss(); } } }; }こちらはセカンダリプログレスバーを使ったサンプルです。プログレスバーに加え、セカンダリプログレスバーを表示しています。先行して処理しているものの進捗状況について、セカンダリ値に指定すると、プログレスバーより薄めの色で進捗状況を表示します。セカンダリ値の指定には、setSecondaryProgress()やincrementSecondaryProgressBy()等のメソッドを使用します。
実行結果
セカンダリプログレスバーの色が少し薄いことがわかります。
下の数値は(セカンダリプログレスバーではなく)プログレスバーの状況を示しています。
0 件のコメント:
コメントを投稿