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 開發目標:
![](https://developer.android.google.cn/static/images/quick-guides/collection-illustration.png?hl=zh-tw)
針對大螢幕進行最佳化
讓應用程式支援平板電腦、折疊式裝置和 ChromeOS 裝置的最佳使用者體驗。
有問題或意見回饋嗎?
請前往常見問題頁面,瞭解快速指南或與我們聯絡,分享您的想法。