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

Android WebViewでPDFを表示する方法を徹底解説!

Android WebViewでPDFを表示する方法

この記事では、AndroidアプリのWebViewを使用してPDFファイルを表示する方法を、サンプルコードとともにわかりやすく解説します。WebViewは標準ではPDFを直接描画できないため、Googleドキュメントビューア(Google Docs Viewer)を経由するのが定番の手法です。

ステップ1:新規プロジェクトの作成

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

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

res/layout/activity_main.xml に以下のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
   xmlns:app="https://schemas.android.com/apk/res-auto"
   xmlns:tools="https://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:gravity="center"
   android:layout_height="match_parent"
   tools:context=".MainActivity"
   android:orientation="vertical">
   <WebView
      android:id="@+id/web_view"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />
</LinearLayout>

上記のコードでは、PDFを表示するためのWebViewを画面全体に配置しています。

ステップ3:MainActivity.java の編集

src/MainActivity.java に以下のコードを追加します。

package com.example.myapplication;
import android.app.ProgressDialog;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {
    @RequiresApi(api = Build.VERSION_CODES.P)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Loading Data...");
        progressDialog.setCancelable(false);
        WebView web_view = findViewById(R.id.web_view);
        web_view.requestFocus();
        web_view.getSettings().setJavaScriptEnabled(true);
        String myPdfUrl = "gymnasium-wandlitz.de/vplan/vplan.pdf";
        String url = "https://docs.google.com/viewer?embedded=true&url=" + myPdfUrl;
        web_view.loadUrl(url);
        web_view.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
        web_view.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                if (progress < 100) {
                    progressDialog.show();
                }
                if (progress == 100) {
                    progressDialog.dismiss();
                }
            }
        });
    }
}

コードのポイント解説

  • JavaScriptの有効化: setJavaScriptEnabled(true) を設定することで、WebView内でJavaScriptが動作し、Googleビューアが正しく機能します。
  • Googleドキュメントビューアの利用: PDFのURLを https://docs.google.com/viewer?embedded=true&url= に渡すことで、端末にPDFプラグインがなくてもPDFを表示できます。
  • 読み込み状況の表示: WebChromeClientの onProgressChanged() を使い、読み込み中はProgressDialogを表示し、100%になったら非表示にします。
  • URL遷移の制御: shouldOverrideUrlLoading() でリンククリック時にもWebView内でページを開くように制御しています。

※なお、ProgressDialogは現在非推奨(Deprecated)となっているため、最新の開発ではProgressBarやカスタムダイアログへの置き換えが推奨されます。

ステップ4:AndroidManifest.xml の編集

インターネット通信を行うため、AndroidManifest.xml に以下のように INTERNET権限 を宣言します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.myapplication">
    <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からアプリを実行するには、プロジェクト内のアクティビティファイルを開き、ツールバーの実行アイコンをクリックします。接続したモバイルデバイスを選択すると、端末に次のような画面が表示され、WebView内にPDFが読み込まれます。

Android WebViewでPDFを表示する方法を徹底解説!

  1. AndroidのWebViewでフォント(書体)を変更する方法を徹底解説

    この記事では、AndroidアプリのWebViewで表示するテキストのフォントフェイス(書体)を変更する方法を、実際のコード例とともにステップごとに解説します。WebViewは標準的なフォントでHTMLを表示しますが、CSSの@font-faceルールを活用することで、assetsフォルダに配置した独自のフォントファイルを読み込ませることができます。Step 1:プロジェクトの新規作成まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成しましょう。Step 2:レイアウトフ

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

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