画像にエフェクトをかけている間や、サーバからファイルをダウンロードするなど、アプリを作る上でユーザに何かの実行中ということ、もしくは進捗度合いを示す場面は多々あるかと思います。
AndroidではProgressBarクラスを用いることでプログレスバーを表示することが可能です。
ProgressBarクラスは上記のスクーンショットのように4つの表示形式をスタイル(Style)として指定することができます。
ProgressBarのStyle
Style | 形状 |
---|---|
android:progressBarStyle | 通常の円 |
android:progressBarStyleHorizontal | 水平方向のバー |
android:progressBarStyleLarge | 大きい円 |
android:progressBarStyleSmall | 小さい円 |
レイアウトファイルに記述する場合はそれぞれ以下のように行います。
<ProgressBar android:id="@+id/ProgressBarDefault" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ProgressBar> <ProgressBar android:id="@+id/ProgressBarHorizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal"> </ProgressBar> <ProgressBar android:id="@+id/ProgressBarLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:attr/progressBarStyleLarge"> </ProgressBar> <ProgressBar android:id="@+id/ProgressBarSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:attr/progressBarStyleSmall"> </ProgressBar>
進捗の値設定
水平方向の進捗バーのスタイルを指定した場合は、現在の進捗度合いを設定することが可能です。
setMaxメソッドで最大値を設定し、setProgressメソッドとsetSecondaryProgressメソッドで現在の値(進捗)を設定します。
setSecondaryProgressは薄い表示になります。
ProgressBar progressBar1 = (ProgressBar)findViewById(R.id.ProgressBarHorizontal1); progressBar1.setMax(100); // 水平プログレスバーの最大値を設定 progressBar1.setProgress(20); // 水平プログレスバーの値を設定 progressBar1.setSecondaryProgress(60); // 水平プログレスバーのセカンダリ値を設定 ProgressBar progressBar2 = (ProgressBar)findViewById(R.id.ProgressBarHorizontal2); progressBar2.setMax(200); // 水平プログレスバーの最大値を設定 progressBar2.setProgress(150); // 水平プログレスバーの値を設定 progressBar2.setSecondaryProgress(100); // 水平プログレスバーのセカンダリ値を設定
下のsetSecondaryProgressで設定した値よりsetProgressで設定した値の方が大きいので見えなくなってしまっています。
また、単純に1つの作業の進捗を示すのであればsetSecondaryProgressは設定する必要が無いかもしれません。必要に応じて使うことになります
プログレスダイアログ ProgressDialog
もう1つの進捗の表示としてダイアログであるProgressDialogを使う方法があります。
このプログレスダイアログを出すのは簡単です。ProgressDialogクラスのオブジェクトを生成し、必要な設定を行ってshowメソッドを呼べば表示されます。
progressDialog = new ProgressDialog(this); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setMessage("処理を実行中しています"); progressDialog.setCancelable(true); progressDialog.show();
※private ProgressDialog progressDialog;と宣言されているとします
このダイアログを表示した後に別スレッドで必要な処理を行い、完了すればdismissメソッドでダイアログを閉じます。
progressDialog.dismiss();