プログラム関係の備忘録。技術系記事1000記事以上を目指すブログ

[Java]Androidアプリでwebviewの読み込み度合に応じprogressbarを表示

  • 2020年12月9日
  • 2021年7月9日
  • JAVA
  • 465view
  • 0件

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の表示ができなくなる。
最近のグレードではできる。
原因は深くまで追っていない。