管理 WebView 狀態

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();
}

這個步驟僅適用於 View 系統,因為 Jetpack Compose 不需要將任何內容作廢,即可正確調整 Composable 元素大小。不過,如果管理方式不當,Compose 往往會重新建立 WebView

重點

  • android:configChanges:資訊清單 <activity> 元素的屬性,可列出活動處理的設定變更。
  • View#invalidate():導致重新繪製檢視畫面的方法,由 WebView 繼承。

結果

應用程式的 WebView 元件現在會在遇到多種設定變更 (舉凡從調整大小、變更螢幕方向、到折疊和展開) 時保留自身狀態和捲動位置。

包含此指南的集合

本指南是精選的快速指南系列之一,涵蓋更廣泛的 Android 開發目標:

讓應用程式支援平板電腦、折疊式裝置和 ChromeOS 裝置的最佳使用者體驗。

有問題或意見回饋嗎?

請前往常見問題頁面,瞭解快速指南或與我們聯絡,分享您的想法。