管理 WebView 状态

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

要点

结果

现在,应用的 WebView 组件在遇到多种配置更改时仍可保持原来的状态和滚动位置,无论是调整大小、更改屏幕方向还是设备折叠和展开都不例外。

包含本指南的集合

本指南属于以下精选快速入门指南集合,这些指南涵盖了更广泛的 Android 开发目标:

让您的应用能够在平板电脑、可折叠设备和 ChromeOS 设备上提供优化的用户体验。

有问题或反馈

请访问我们的常见问题解答页面,了解简短指南,或与我们联系,告诉我们您的想法。