จัดการสถานะ 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();
}

ขั้นตอนนี้มีผลกับระบบมุมมองเท่านั้น เนื่องจาก Jetpack Compose ไม่จำเป็นต้องทำให้ข้อมูลใดๆ ใช้งานไม่ได้เพื่อปรับขนาดองค์ประกอบ Composable ให้ถูกต้อง อย่างไรก็ตาม Compose จะสร้าง WebView ขึ้นมาใหม่บ่อยครั้งหากไม่ได้รับการจัดการอย่างถูกต้อง

ข้อมูลสำคัญ

  • android:configChanges: แอตทริบิวต์ขององค์ประกอบ <activity> ในไฟล์ Manifest แสดงรายการการเปลี่ยนแปลงการกําหนดค่าที่จัดการโดยกิจกรรม
  • View#invalidate(): เมธอดที่ทำให้วาดมุมมองใหม่ รับค่าโดย WebView

ผลลัพธ์

ตอนนี้คอมโพเนนต์ WebView ของแอปจะยังคงสถานะและตำแหน่งการเลื่อนไว้แม้จะมีการเปลี่ยนแปลงการกำหนดค่าหลายอย่าง ตั้งแต่การปรับขนาดไปจนถึงการเปลี่ยนแปลงการวางแนว ตลอดจนการพับและการกางอุปกรณ์

คอลเล็กชันที่มีคู่มือนี้

คู่มือนี้เป็นส่วนหนึ่งของคอลเล็กชันคู่มือฉบับย่อที่มีการดูแลจัดการ ซึ่งครอบคลุมเป้าหมายการพัฒนา Android ที่กว้างขึ้น ดังนี้

เปิดใช้แอปเพื่อรองรับประสบการณ์การใช้งานที่เพิ่มประสิทธิภาพในแท็บเล็ต อุปกรณ์แบบพับได้ และอุปกรณ์ ChromeOS

หากมีคำถามหรือความคิดเห็น

ไปที่หน้าคำถามที่พบบ่อยเพื่อดูคู่มือฉบับย่อหรือติดต่อเราเพื่อบอกความคิดเห็นของคุณ