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 開発の幅広い目標を網羅する、厳選されたクイックガイド コレクションの一部です。
![](https://developer.android.com/static/images/quick-guides/collection-illustration.png?hl=ja)