WebView の状態を管理する

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

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

結果

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

状態を管理する

構成の変更時にアクティビティの再作成をできるだけ回避し、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 によって継承されます。

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

このガイドは、Android 開発のより広範な目標を対象とした、厳選されたクイックガイド コレクションの一部です。

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

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

よくある質問のページでクイック ガイドを確認するか、お問い合わせのうえご意見をお聞かせください。