【Kotlin】AndroidでWebViewのURL読み込み完了を検知する方法を解説
概要
本記事では、Kotlinを使ってAndroidアプリのWebViewがURLの読み込みを完了したタイミングを検知する方法を解説します。WebViewClientのonPageFinished()コールバックを利用すればページ読み込み完了時に任意の処理を実行でき、あわせてWebChromeClientのonProgressChanged()を使えば読み込みの進捗率(0〜100%)もリアルタイムに表示できます。
実装手順
ステップ1:新規プロジェクトの作成
まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要事項を入力してプロジェクトを作成してください。
ステップ2:レイアウトファイル(res/layout/activity_main.xml)の編集
次に、res/layout/activity_main.xmlに以下のコードを追加します。TextView・WebView・ButtonをRelativeLayoutで配置したシンプルな構成です。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="4dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:textColor="#000000"
android:textSize="24sp" />
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/btnLoad"
android:layout_below="@id/textView" />
<Button
android:id="@+id/btnLoad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Load URL" />
</RelativeLayout>
ステップ3:MainActivity.ktの実装
src/MainActivity.ktに以下のコードを追加します。
import android.os.Bundle
import android.webkit.WebChromeClient
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
lateinit var webView: WebView
lateinit var textView: TextView
private lateinit var btnLoad: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
textView = findViewById(R.id.textView)
btnLoad = findViewById(R.id.btnLoad)
webView = findViewById(R.id.webView)
webView.webViewClient = WebViewClient()
btnLoad.setOnClickListener {
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView, weburl: String) {
Toast.makeText(this@MainActivity, "Your WebView is Loaded....",
Toast.LENGTH_LONG).show()
}
}
webView.webChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView, newProgress: Int) {
textView.text = "Page loading : $newProgress%"
if (newProgress == 100) {
textView.text = "Page Loaded."
}
}
}
webView.loadUrl("https://www.tutorialspoint.com")
}
}
}
このコードのポイントは以下の2点です。
- onPageFinished():WebViewClientのコールバックメソッドで、ページの読み込みが完了した瞬間に呼び出されます。ここではToastを表示して読み込み完了を通知しています。
- onProgressChanged():WebChromeClientのコールバックメソッドで、読み込みの進捗率(0〜100%)を受け取れます。進捗をTextViewに表示し、100%に達したら「Page Loaded.」に切り替えています。
ステップ4:マニフェストファイル(androidManifest.xml)の編集
インターネット上のWebページを読み込むため、androidManifest.xmlにINTERNETパーミッションを追加します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
アプリの実行と動作確認
それではアプリを実行してみましょう。実機のAndroidスマートフォンがPCに接続されていることを前提に説明します。Android Studioからアプリを実行するには、プロジェクト内のアクティビティファイルを開き、ツールバーにある実行アイコン
をクリックします。候補から接続済みのモバイルデバイスを選択すると、実機の画面にデフォルト画面が表示されます。


-
【Android】URLをエンコードする方法をわかりやすく解説|URLEncoderの使い方
AndroidでURLをエンコードするには? 本記事では、AndroidアプリでURLを適切にエンコードする方法を、実際に動作するサンプルコードとともに解説します。 URLに検索キーワードなどのパラメータを含めたい場合、スペースや日本語などの特殊文字がそのまま含まれていると、正しくリクエストが送信できないことがあります。そんなときに役立つのが java.net.URLEncoder クラスです。このクラスを使えば、文字列をUTF-8などでエンコードし、URLとして安全な形式に変換できます。 手順1:新しいプロジェクトを作成する Android Studioを起動し、メニューから「File」→
-
AndroidでWebViewのURL読み込み完了を検知する方法を解説
はじめに この記事では、AndroidアプリにおいてWebViewがURLの読み込みを完了したタイミングを検知(リッスン)する方法を、実際に動作するサンプルコードとともに解説します。 読み込み完了を検知できるようになると、ローディング中のプログレス表示や、読み込み完了時のトースト通知など、ユーザー体験を向上させる処理を簡単に実装できるようになります。 実装手順 ステップ1:新規プロジェクトを作成する Android Studioを起動し、メニューから File → New Project を選択して新しいプロジェクトを作成します。必要な項目をすべて入力してプロジェクトをセットアップしてくだ