9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Kotlin】ローディング中にProgressBarを表示するWebViewの実装

Last updated at Posted at 2019-06-02

環境

  • 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>

プレビューで見るとこんな感じ。
スクリーンショット 2019-06-02 21.21.37.png

ロードする

ただロードをするだけなら下記で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)



ドロイド君がちょこんと出る可愛いページが表示されます:relaxed:

参考

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?