環境
- macOS: 10.14.1
- Android Studio: 3.4
- kotlin: 1.3.21
- Support Library: AndroidX
※Data Bindingを使ったサンプルになります。
手順
インターネット接続の許可
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
レイアウトを組む
WebViewの上にProgressBarを乗せておく。
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/web_view"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<ProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
tools:visibility="visible"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
ロードする
ただロードをするだけなら下記でOK。
val url = "https://www.google.com/"
binding.webView.loadUrl(url)
今回はProgressBarを表示させたいのでWebViewClient
の設定をする。
ローディング開始時に呼ばれるonPageStarted()
メソッドと終了時に呼ばれるonPageFinished()
メソッドを使ってProgressBarを出し分ける。
binding.webView.webViewClient = object: WebViewClient() {
// ローディング開始時に呼ばれる
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
// ProgressBarの表示
binding.progress.visibility = View.VISIBLE
}
// ローディング終了時に呼ばれる
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
// ProgressBarの非表示
binding.progress.visibility = View.GONE
}
}
val url = "https://www.google.com/"
binding.webView.loadUrl(url)
おまけ
存在しないテキトーなURLをwebViewに渡すと……
val url = "https://www.gooaaaaaagle.com/?hl=jaaaaaaaaaaaaaaa"
binding.webView.loadUrl(url)