管理 WebView 狀態

WebView 是一種常用的元件,可提供狀態管理所需的進階系統。WebView 必須在遇到各種設定變更時維持自身狀態和捲動位置。否則,當使用者旋轉裝置或展開摺疊式手機時,WebView 的捲動位置就可能遺失,進而強迫使用者從 WebView 頂端再次捲動至上一個捲動位置。

WebView 很適合管理自身狀態。您只要盡可能管理設定變更,減少重新建立 WebView 的次數,即可善用這項特質。應用程式之所以必須處理設定變更,是因為活動重建作業 (系統處理設定變更的方式) 會重新建立 WebView,導致 WebView 狀態遺失。

結果

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

管理狀態

在設定變更期間,盡可能避免重新建立活動,並將 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 繼承。

包含本指南的集合

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

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

如有問題或想提供意見

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