導入
ProgressDialog
はdeprecatedになったので、ProgressBar
を使用する
<ProgressBar style="?android:attr/progressBarStyle" android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="invisible" />
style="?android:attr/progressBarStyle"
でくるくる回るインジゲーターや横棒の進捗バーを指定できる。
あとはコード側で処理開始時と終了時に表示制御すればよい。
//処理開始 インジゲーターを表示 progressBar.visibility = android.widget.ProgressBar.VISIBLE doAction() //処理終了 インジゲーターを非表示 progressBar.visibility = android.widget.ProgressBar.INVISIBLE
非同期処理中にインジゲーターを表示する
尚、上記例のdoAction()
が非同期処理の場合、処理が終わる前にINVISIBLEとなるので、doAction()
完了時のコールバックにINVISIBLEを渡す必要がある。
progressBar.visibility = android.widget.ProgressBar.VISIBLE doAction{ progressBar.visibility = android.widget.ProgressBar.INVISIBLE }
また、当然ながらProgressBarはUIスレッド上で操作するので、progressBar.visibility = android.widget.ProgressBar.VISIBLE
をワーカースレッドで設定するとクラッシュする。
WebViewのローディングに合わせてインジゲーターを表示する
WebViewにはローディングの開始と終了時のコールバックがあるので、そちらにインジゲータの処理を記述する。
webView.webViewClient = object: WebViewClient(){ override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { progressBar.visibility = android.widget.ProgressBar.VISIBLE super.onPageStarted(view, url, favicon) } override fun onPageFinished(view: WebView?, url: String?) { progressBar.visibility = android.widget.ProgressBar.INVISIBLE super.onPageFinished(view, url) } } webView.loadUrl( url )
またロード開始時はonPageStarted
でキャッチするのだが、PDFファイル等WebViewがロードできないファイルに対してはキャッチできない。その場合はshouldOverrideUrlLoading
を使用する。shouldOverrideUrlLoading
は逆にPOSTからのレスポンス読み込みに対応したてないので必要に応じて切り替えを行おう。
リンク
リンク