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(); }
此步骤仅适用于 View 系统,因为 Jetpack Compose 无需让任何元素失效即可正确调整 Composable
元素的大小。不过,如果管理方式有误,Compose 会经常重新创建 WebView
。
要点
android:configChanges
:清单<activity>
元素的属性。列出由 activity 处理的配置更改。View#invalidate()
:导致系统重新绘制 View 的方法。由WebView
继承。
结果
现在,应用的 WebView
组件在遇到多种配置更改时仍可保持原来的状态和滚动位置,无论是调整大小、更改屏幕方向还是设备折叠和展开都不例外。
包含本指南的集合
本指南属于以下精选快速入门指南集合,这些指南涵盖了更广泛的 Android 开发目标:
![](https://developer.android.google.cn/static/images/quick-guides/collection-illustration.png?hl=zh-cn)
针对大屏设备进行优化
让您的应用能够在平板电脑、可折叠设备和 ChromeOS 设备上提供优化的用户体验。
有问题或反馈
请访问我们的常见问题解答页面,了解简短指南,或与我们联系,告诉我们您的想法。