webviewの設定
まずはAndroidManifestにパーミッションを設定
<uses-permission android:name="android.permission.INTERNET" />
レイアウト
WebViewの上にくるようにProgressBarを配置
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/naviBackground" />
<ProgressBar
android:id="@+id/progressBar
"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="5dp"
android:layout_marginTop="0dp"
android:indeterminate="false" />
indeterminate=”true”にしておけば雑な話ProgressBarはこれだけでも動く
コントローラー
import
import android.webkit.WebChromeClient
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.ProgressBar
アクティビティを読み込む
val webView = findViewById<WebView>(R.id.webView)
val progressBar = findViewById<ProgressBar>(R.id.progressBar)
webView.setWebViewClient(this);
webView.loadUrl(url);
ProgressBarをWebViewの読み込みに合わせて動的に変更させる
上記の部分に以下を追加。WebChromeClientを使用する
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if(newProgress == 100) {
progressBar.setVisibility(view.GONE);
} else {
progressBar.setVisibility(view.VISIBLE);
progressBar.setProgress(newProgress);
}
}
});
newProgressには0~100のintの値を取得することができる。
100(読み込み完了時)はprogressbarを非表示に。
100未満の場合はprogressbarを表示し、newProgressの値をprogressbarにセットする。
備考
mProgress.setProgress(newProgress,true);
上記のように引数を足すとanimationをonにすることができ、progressbarの移動がスムーズになる。
しかし、Android6.0系ではこの引数を与えることでwebviewの表示ができなくなる。
最近のグレードではできる。
原因は深くまで追っていない。