Tôi đã phát triển một ứng dụng web cho hệ điều hành Firefox, nhưng tôi muốn làm cho nó chạy "nguyên bản" trong Android. Ứng dụng của tôi bao gồm một hộp thoại là div
lấp đầy toàn bộ trang khi hiển thị, mà tôi đã thử nghiệm bằng cách sử dụng công cụ thiết kế đáp ứng của Firefox và nó thay đổi kích cỡ chính xác. Khi một bàn phím mềm xuất hiện, tôi muốn đối thoại thay đổi kích thước sang khung nhìn còn lại vì có một số nút ở cuối hộp thoại.WebView không thay đổi kích thước
Tôi đã tạo một ứng dụng có một hoạt động chỉ chứa WebView
. Tôi muốn xem để thay đổi kích thước khi bàn phím hiện ra, vì vậy tôi đã sử dụng:
android:windowSoftInputMode="stateUnspecified|adjustResize"
mà dường như không thực hiện bất kỳ sự khác biệt cho các WebView
khi bàn phím đã nhìn thấy được. Tôi đã xem trực tuyến và có nhiều người phàn nàn về vấn đề này, nhưng tất cả họ đều có cùng điểm chung, họ đang sử dụng chủ đề Theme.Black.NoTitleBar.Fullscreen
, mà tôi không có. Tôi đã thử tất cả các giải pháp cho vấn đề đó, nhưng không ai trong số họ làm việc.
Sau đó tôi bắt đầu tự hỏi liệu có lỗi trong số WebView
có nghĩa là nó không thay đổi kích thước. Vì vậy, tôi đã viết một tùy chỉnh View
đã in kích thước trong onLayout
.
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
Log.d(TAG, t + " " + r + " " + b + " " + l);
}
Và chắc chắn đủ, chế độ xem đã được thay đổi kích thước chính xác khi bàn phím xuất hiện và không được chấp nhận. Vì vậy, tôi đã làm một số nghiên cứu thêm và tôi tìm thấy một vài câu trả lời mà nói rằng bạn cần phải ẩn các WebView
, tải lại nó, và sau đó hiển thị nó một lần nữa.
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
Log.d(TAG, t + " " + r + " " + b + " " + l);
mWebView.setVisibility(View.GONE);
mWebView.layout(l, t, r, b);
mWebView.invalidate();
mWebView.reload();
mWebView.setVisibility(View.VISIBLE);
}
Một lần nữa, điều này không giải quyết được sự cố của tôi. (Và như một điểm phụ, đây là một ứng dụng web với một tệp .html và JS làm cho trạng thái của tất cả các phần tử trong ứng dụng thay đổi trong thời gian chạy, do đó, tải lại nó không phải là một tùy chọn.)
câu hỏi là liệu có ai biết cách thay đổi kích thước một WebView
khi nội dung đã được tải khi bàn phím được hiển thị hay không.
Tôi chưa từng gặp vấn đề này trước đây. Webview của tôi và nội dung của nó, luôn luôn thay đổi kích thước đúng cách. Bạn đang thử nghiệm thiết bị nào? Ngoài ra, tôi sử dụng "stateHidden | adjustResize" –
Wow ... bạn nói đúng! Tôi tạo ra một trang html rỗng với một div cố định 'cố định' và thay đổi kích cỡ như mong đợi. Vấn đề là tôi phải sử dụng 'position: absolute;' do một lỗi trong WebKit làm cho các phần tử 'fixed' không phản ứng với bất kỳ' -webkit-transform' nào, vì vậy tôi sẽ phải tìm một cách khác. –
Rất vui được trợ giúp.Nói chung tôi thấy sử dụng WebView quá buggy (đặc biệt là giữa các thiết bị) và sẽ tránh sử dụng chúng bằng mọi giá. –