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 開発のより広範な目標を対象とした、厳選されたクイックガイド コレクションの一部です。