WebView เป็นคอมโพเนนต์ที่ใช้กันโดยทั่วไปซึ่งมีระบบขั้นสูงสำหรับการจัดการสถานะ WebView ต้องรักษาสถานะและตำแหน่งการเลื่อนไว้เมื่อมีการเปลี่ยนแปลงการกำหนดค่า WebView อาจสูญเสียตำแหน่งการเลื่อนเมื่อผู้ใช้หมุนอุปกรณ์หรือกางโทรศัพท์แบบพับได้ ซึ่งบังคับให้ผู้ใช้ต้องเลื่อนอีกครั้งจากด้านบนของ WebView ไปยังตำแหน่งการเลื่อนก่อนหน้า
WebView จัดการสถานะได้ดี คุณใช้ประโยชน์จากคุณภาพนี้ได้โดยการจัดการการเปลี่ยนแปลงการกำหนดค่าให้ได้มากที่สุดเพื่อลดจำนวนครั้งที่ระบบสร้าง WebView ขึ้นมาใหม่ แอปควรจัดการการเปลี่ยนแปลงการกำหนดค่าเนื่องจากการสร้างกิจกรรมขึ้นมาใหม่ (วิธีที่ระบบใช้จัดการการเปลี่ยนแปลงการกำหนดค่า) จะสร้าง WebView ขึ้นมาใหม่ ซึ่งทำให้ WebView สูญเสียสถานะ
ผลลัพธ์
คอมโพเนนต์ WebView ของแอปจะรักษาสถานะและตำแหน่งการเลื่อนไว้เมื่อมีการเปลี่ยนแปลงการกำหนดค่าหลายรายการ ตั้งแต่การปรับขนาดไปจนถึงการเปลี่ยนแปลงการวางแนว ไปจนถึงการพับและกางอุปกรณ์
ความเข้ากันได้ของเวอร์ชัน
การติดตั้งใช้งานนี้เข้ากันได้กับ API ทุกระดับ
ความสัมพันธ์
ไม่มี
จัดการสถานะ
หลีกเลี่ยงการสร้างกิจกรรมขึ้นมาใหม่ให้ได้มากที่สุดระหว่างการเปลี่ยนแปลงการกำหนดค่า และปล่อยให้ 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>ในไฟล์ Manifest แสดงรายการการเปลี่ยนแปลงการกำหนดค่าที่กิจกรรมจัดการView#invalidate(): เมธอดที่ทำให้มีการวาด View ขึ้นมาใหม่WebViewสืบทอดเมธอดนี้
คอลเล็กชันที่มีคำแนะนำนี้
คำแนะนำนี้เป็นส่วนหนึ่งของคอลเล็กชันคำแนะนำฉบับย่อที่คัดสรรมาแล้ว ซึ่งครอบคลุมเป้าหมายการพัฒนา Android ที่กว้างขึ้น