WebView เป็นคอมโพเนนต์ที่ใช้กันโดยทั่วไปซึ่งมีระบบขั้นสูงสำหรับการจัดการสถานะ WebView ต้องรักษาสถานะและตำแหน่งการเลื่อนไว้เมื่อมีการเปลี่ยนแปลงการกำหนดค่า WebView อาจสูญเสียตำแหน่งการเลื่อนเมื่อผู้ใช้หมุนอุปกรณ์หรือกางโทรศัพท์แบบพับได้ ซึ่งบังคับให้ผู้ใช้ต้องเลื่อนอีกครั้งจากด้านบนของ WebView ไปยังตำแหน่งการเลื่อนก่อนหน้า
แนวทางปฏิบัติแนะนำ
ลดจำนวนครั้งที่สร้าง WebView ใหม่ WebView มีความสามารถในการจัดการสถานะได้ดี และคุณสามารถใช้ประโยชน์จากความสามารถนี้ได้โดยการจัดการการเปลี่ยนแปลงการกำหนดค่าให้ได้มากที่สุด แอปของคุณต้องจัดการการเปลี่ยนแปลงการกำหนดค่าเนื่องจากการสร้าง Activity ใหม่ (วิธีจัดการการเปลี่ยนแปลงการกำหนดค่าของระบบ) จะสร้าง WebView ใหม่ด้วย ซึ่งทำให้ WebView สูญเสียสถานะ
ส่วนผสม
android:configChanges: แอตทริบิวต์ขององค์ประกอบ<activity>ในไฟล์ Manifest แสดงรายการการเปลี่ยนแปลงการกำหนดค่าที่กิจกรรมจัดการView#invalidate(): เมธอดที่ทำให้มีการวาดมุมมองใหม่WebViewสืบทอดเมธอดนี้
ขั้นตอน
หากต้องการบันทึกสถานะ WebView ให้หลีกเลี่ยงการสร้าง Activity ใหม่ให้ได้มากที่สุด
แล้วปล่อยให้ 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();
}
ขั้นตอนนี้ใช้ได้กับระบบมุมมองเท่านั้น เนื่องจาก Jetpack Compose ไม่จำเป็นต้อง
ยกเลิกการใช้งานใดๆ เพื่อปรับขนาด Composable อย่างถูกต้อง อย่างไรก็ตาม Compose จะสร้าง WebView ใหม่บ่อยครั้งหากไม่ได้จัดการอย่างถูกต้อง ใช้
Accompanist WebView Wrapper เพื่อบันทึกและกู้คืนสถานะ WebView
ในแอป Compose
ผลลัพธ์
ตอนนี้คอมโพเนนต์ WebView ของแอปจะยังคงสถานะและตำแหน่งการเลื่อนไว้เมื่อมีการเปลี่ยนแปลงการกำหนดค่าหลายรายการ ตั้งแต่การปรับขนาดไปจนถึงการเปลี่ยนการวางแนว ไปจนถึงการพับและกางออก
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงการกำหนดค่าและวิธีจัดการการเปลี่ยนแปลงดังกล่าวได้ที่จัดการ การเปลี่ยนแปลงการกำหนดค่า