WebView
是一个常用的组件,提供了一套先进的状态管理系统。WebView
必须在配置变更时保持其状态和滚动位置。WebView
在用户旋转设备或展开折叠屏手机时可能会丢失滚动位置,这会迫使用户从 WebView
的顶部重新滚动到之前的滚动位置。
WebView
擅长管理其状态。你可以利用这一特性,尽可能地管理配置变更,以最大程度地减少 WebView
被重新创建的次数。你的应用应该处理配置变更,因为 Activity 重建(系统处理配置变更的方式)会重新创建 WebView
,从而导致 WebView
丢失状态。
管理状态
在配置变更期间,尽可能避免重新创建 Activity
,并让 WebView
失效,以便其在保持状态的同时进行大小调整。
如何管理 WebView
状态
- 声明由你的应用处理的配置变更
- 使
WebView
状态失效
1. 在应用的 AndroidManifest.xml
文件中添加配置变更
通过指定由你的应用(而非系统)处理的配置变更来避免 Activity 重建
<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(); }
此步骤仅适用于视图系统,因为 Jetpack Compose 无需使任何内容失效即可正确调整 Composable
元素的大小。但是,如果管理不当,Compose 仍会频繁重新创建 WebView
。
要点
android:configChanges
:清单<activity>
元素的属性。列出了由 Activity 处理的配置变更。View#invalidate()
:导致视图重绘的方法。由WebView
继承。
结果
你的应用的 WebView
组件现在可以在多种配置变更(从调整大小到方向变更再到设备折叠和展开)中保留其状态和滚动位置。
包含本指南的合集
本指南是以下精选快速指南合集的一部分,这些合集涵盖了更广泛的 Android 开发目标

针对大屏设备进行优化
使你的应用能够在平板电脑、折叠屏设备和 ChromeOS 设备上支持优化的用户体验。
有问题或反馈
前往我们的常见问题页面了解快速指南,或联系我们并告诉我们你的想法。