WebView là một thành phần thường được sử dụng. Thành phần này cung cấp hệ thống quản lý trạng thái tiên tiến. WebView phải giữ nguyên trạng thái và vị trí cuộn khi có những thay đổi về cấu hình. WebView có thể rời khỏi vị trí cuộn khi người dùng xoay thiết bị hoặc mở gập màn hình điện thoại, buộc người dùng phải cuộn lại từ đầu WebView đến vị trí cuộn trước đó.
Các phương pháp hay nhất
Giảm thiểu số lần tạo lại WebView. WebView thích hợp trong việc quản lý trạng thái, bạn có thể tận dụng tính năng này bằng cách quản lý càng nhiều thay đổi cấu hình càng tốt. Ứng dụng của bạn phải xử lý các thay đổi về cấu hình vì việc tạo lại Activity (cách xử lý các thay đổi về cấu hình của hệ thống) cũng sẽ tạo lại WebView, khiến WebView bị mất trạng thái.
Nguyên liệu
android:configChanges: Thuộc tính của phần tử tệp kê khai<activity>. Liệt kê các thay đổi về cấu hình do hoạt động xử lý.View#invalidate(): Phương thức khiến khung hiển thị được vẽ lại. Được kế thừa bởiWebView.
Các bước
Để lưu trạng thái WebView, hãy tránh tạo lại Activity nhiều nhất có thể, sau đó vô hiệu hoá WebView để thành phần này thay đổi về kích thước trong khi vẫn giữ nguyên trạng thái.
1. Thêm các thay đổi về cấu hình vào AndroidManifest.xml
Tránh tạo lại hoạt động bằng cách chỉ định thay đổi cấu hình do ứng dụng của bạn xử lý (thay vì để hệ thống xử lý):
<activity
android:name=".MyActivity"
android:configChanges="screenLayout|orientation|screenSize
|keyboard|keyboardHidden|smallestScreenSize" />
2. Vô hiệu hoá WebView khi có thay đổi về cấu hình
Kotlin
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
webView.invalidate()
}
Java
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
webview.invalidate();
}
Bước này chỉ áp dụng cho hệ thống khung hiển thị, vì Jetpack Compose không cần vô hiệu hoá bất kỳ thứ gì để đổi kích thước các phần tử Composable một cách chính xác. Tuy nhiên, Compose sẽ thường xuyên tạo lại WebView nếu không được quản lý đúng cách. Sử dụng trình bao bọc Accompanist WebView để lưu và khôi phục trạng thái WebView trong các ứng dụng Compose.
Kết quả
Giờ đây, các thành phần WebView của ứng dụng đã giữ nguyên trạng thái và vị trí cuộn khi cấu hình có nhiều sự thay đổi, như thay đổi kích thước, thay đổi hướng hoặc trạng thái gập/mở.
Tài nguyên khác
Để tìm hiểu thêm về thay đổi cấu hình cũng như cách quản lý chúng, hãy xem bài viết Xử lý thay đổi cấu hình.