【Android × Kotlin】WebView でアプリ組み込みの Web ページを表示する
今回は、WebView でアプリ組み込みの Web ページを表示する方法を解説します。
なお、ここに掲載しているソースコードは以下の環境で動作確認しています。
- Android Studio Bumblebee | 2021.1.1 Patch 3
- JDK 11.0.11
- Android Gradle Plugin 7.1.3
- Kotlin 1.6.21
- Gradle 7.4.2
WebView による Web ページの表示
WebView は、HTML などの Web ページを表示できる View です。
例えば、マニフェストファイルにインターネットアクセス権限を付与して、以下のように URL を指定することにより、その URL の Web ページを表示できます。
val webView: WebView = findViewById(R.id.webView) webView.loadUrl("https://www.example.com")
一方で、表示する Web ページのファイルをアプリに組み込み、それを表示することも可能です。
ここでは、その方法について解説します。
Web ページのファイルをアプリに組み込む
まず、Web ページのファイルを保存する assets ディレクトリを、アプリモジュールに作成します。
アプリモジュールのディレクトリを右クリックして、New -> Directory の順番でクリックします。
New Directory のウィンドウが表示されるので、src/main/assets をクリックします。
そうすると、アプリモジュールに assets ディレクトリが作成されます。
この assets ディレクトリに以下のような HTML ファイルを保存します。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <body> <p>Hello World!</p> </body> </html>
以上で、Web ページのファイルのアプリ組み込みは完了です。
ローカルの Web ページを表示する
アプリに組み込んだ Web ページを WebView に表示してみます。
WebView を表示する Activity を以下のように実装します。
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WebView(this).apply { setContentView(this) loadUrl("file:///android_asset/index.htm") settings.allowFileAccess = true } } }
今回は XML のレイアウトファイルを使わずに、WebView のインスタンスを Activity の setContentView に直接渡します。
WebView(this).apply { setContentView(this) ︙ }
その後、WebView#loadUrl に 表示したい Web ページのファイルパスを指定します。このとき、ファイルパスは、file:///android_asset/{ファイル名}
となるように指定します。
loadUrl("file:///android_asset/index.htm")
最後に、WebView に対してファイルアクセス許可を有効にする必要があります。この設定値は、Android 11 以降、デフォルト値が false に変更されているため、true に設定します。
settings.allowFileAccess = true
これで、WebView にローカルの Web ページが表示されるようになります。
関連記事
WebView の JavaScript からネイティブコードを呼び出す方法について、以下で解説しています。