Android
 Computer >> コンピューター >  >> プログラミング >> Android

【Android】WebViewでURL読み込み中にプログレスバー(進行状況)を表示する方法

本記事では、AndroidアプリにおいてWebViewがURLを読み込んでいる間に、進行状況を示すプログレスバーを表示する方法を、Kotlinのコード例とともにステップ形式でわかりやすく解説します。

Webページの読み込みには時間がかかることがあるため、ローディング中表示を出すことでユーザー体験を大きく向上させることができます。

ステップ1:新規プロジェクトを作成する

まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目を入力してプロジェクトを作成してください。

ステップ2:レイアウトファイル(activity_main.xml)を編集する

次に、res/layout/activity_main.xml に以下のコードを追加します。画面中央に大きなスタイルのProgressBarと、その下にWebViewを配置したシンプルなレイアウトです。

<?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="2dp"
    tools:context=".MainActivity">
    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerInParent="true"
        android:max="3"
        android:progress="100" />
    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/progressBar"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="5dp" />
</RelativeLayout>

ステップ3:MainActivity.ktに処理を記述する

続いて、src/MainActivity.kt に以下のコードを追加します。ポイントは、カスタムした WebViewClientonPageFinished() をオーバーライドし、ページの読み込みが完了したタイミングでプログレスバーの可視性を View.GONE に変更して非表示にしている点です。

import android.os.Bundle
import android.view.View
import android.webkit.WebView
import android.widget.ProgressBar
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    lateinit var webView: WebView
    lateinit var progressBar: ProgressBar

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
        webView = findViewById(R.id.webView)
        progressBar = findViewById(R.id.progressBar)
        webView.webViewClient = WebViewClient()
        webView.loadUrl("https://www.amazon.com")
    }

    inner class WebViewClient : android.webkit.WebViewClient() {
        override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
            view.loadUrl(url)
            return false
        }

        override fun onPageFinished(view: WebView, url: String) {
            super.onPageFinished(view, url)
            progressBar.visibility = View.GONE
        }
    }
}

ステップ4:AndroidManifest.xmlにインターネット権限を追加する

最後に、androidManifest.xml に以下のコードを追加します。外部のWebサイトを読み込むため、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スマートフォンがパソコンに接続されているものとして説明を進めます。

Android Studioからアプリを実行するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。

【Android】WebViewでURL読み込み中にプログレスバー(進行状況)を表示する方法

実行すると、まず画面中央にプログレスバーが回転表示され、Webページの読み込みが完了すると自動的に消えてWebViewの内容が表示されます。

【Android】WebViewでURL読み込み中にプログレスバー(進行状況)を表示する方法

まとめ

WebViewでのURL読み込み中に進行状況を表示するには、ProgressBarをレイアウトに配置し、WebViewClient.onPageFinished() を使って読み込み完了時に非表示にするのが基本の流れです。より高度な実装としては、onProgressChanged() を利用して読み込み率(0〜100%)に応じたプログレスバーの更新を行う方法もありますので、用途に合わせて使い分けてください。

  1. 【Android】URLをエンコードする方法をわかりやすく解説|URLEncoderの使い方

    AndroidでURLをエンコードするには? 本記事では、AndroidアプリでURLを適切にエンコードする方法を、実際に動作するサンプルコードとともに解説します。 URLに検索キーワードなどのパラメータを含めたい場合、スペースや日本語などの特殊文字がそのまま含まれていると、正しくリクエストが送信できないことがあります。そんなときに役立つのが java.net.URLEncoder クラスです。このクラスを使えば、文字列をUTF-8などでエンコードし、URLとして安全な形式に変換できます。 手順1:新しいプロジェクトを作成する Android Studioを起動し、メニューから「File」→

  2. AndroidでWebViewのURL読み込み完了を検知する方法を解説

    はじめに この記事では、AndroidアプリにおいてWebViewがURLの読み込みを完了したタイミングを検知(リッスン)する方法を、実際に動作するサンプルコードとともに解説します。 読み込み完了を検知できるようになると、ローディング中のプログレス表示や、読み込み完了時のトースト通知など、ユーザー体験を向上させる処理を簡単に実装できるようになります。 実装手順 ステップ1:新規プロジェクトを作成する Android Studioを起動し、メニューから File → New Project を選択して新しいプロジェクトを作成します。必要な項目をすべて入力してプロジェクトをセットアップしてくだ