WebView の状態を管理する

WebView は、状態管理の高度なシステムを提供する、よく使われるコンポーネントです。WebView は、構成の変更後も状態とスクロール位置を維持する必要があります。WebView は、ユーザーがデバイスを回転させるか折りたたみ式スマートフォンを開くと、スクロール位置を喪失することがあります。そのため、ユーザーは WebView の最上部から前のスクロール位置まで再びスクロールする必要があります。

WebView は状態を管理しやすく、この品質を活用するには、構成変更をできるだけ多く管理して、WebView の再作成回数を最小限に抑えます。アクティビティの再作成(システムによる構成変更の処理方法)でも WebView が再作成され、WebView の状態が喪失するため、アプリが構成の変更を処理する必要があります。

状態を管理する

構成変更中は、Activity の再作成をできるだけ回避し、WebView を無効にして、状態を保持したままサイズ変更できるようにします。

WebView の状態を管理するには:

  • アプリで処理する構成変更を宣言する
  • WebView の状態を無効にする

1. アプリの AndroidManifest.xml ファイルに構成変更を追加する

(システムではなく)アプリで処理する構成変更を指定して、アクティビティの再作成を回避します。

<activity
  android:name=".MyActivity"
  android:configChanges="screenLayout|orientation|screenSize
      |keyboard|keyboardHidden|smallestScreenSize" />

2. アプリが構成の変更を受け取るたびに WebView を無効にする

Kotlin

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    webView.invalidate()
}

Java

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    webview.invalidate();
}

このステップはビューシステムにのみ適用されます。Composable 要素を正しくサイズ変更するために Jetpack Compose が無効にする必要があるものは何もないためです。ただし、正しく管理されていない場合、Compose は WebView を頻繁に再作成します。

要点

  • android:configChanges: マニフェストの <activity> 要素の属性。アクティビティによって処理される構成変更をリストします。
  • View#invalidate(): ビューを再描画させるメソッド。WebView によって継承されます。

結果

アプリの WebView コンポーネントは、サイズ変更から向きの変更、デバイスの折りたたみと展開まで、複数の構成変更の後も状態とスクロール位置を保持するようになりました。

このガイドを含むコレクション

このガイドは、Android 開発の幅広い目標を網羅する、厳選されたクイックガイド コレクションの一部です。

タブレット、折りたたみ式デバイス、ChromeOS デバイスで最適化されたユーザー エクスペリエンスをサポートするようにアプリを有効にします。

ご質問やフィードバックがある場合

よくある質問のページでクイックガイドをご覧になるか、お問い合わせフォームからご意見をお寄せください。