2013-08-19 43 views
6

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.

+0

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" –

+0

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. –

+0

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á. –

Trả lời

2

Vấn đề hóa ra là tôi đang sử dụng position: absolute bên trong một position: fixeddiv. Các bên ngoài div được thay đổi kích thước đúng, nhưng bên trong một là không. Lý do tôi phải sử dụng position: absolute là do có lỗi trong WebKit, điều này có nghĩa là bạn không thể transformfixed vị trí div.

4

Đó không chính xác là câu trả lời cho câu hỏi của bạn, nhưng bạn cũng sẽ nhận thấy WebView có kích thước lại khi nó lớn hơn, nhưng không giảm khi chiều cao của nội dung giảm, như tôi đã trả lời câu hỏi này: WebView height = wrap_content with changing font size doesn't work

Các lỗi/tính năng được giới thiệu trên theo dõi vấn đề của Google: https://code.google.com/p/android/issues/detail?id=18726

Xin đừng đổ lỗi cho tôi, tôi chỉ muốn chỉ rằng các vấn đề hơn nữa bạn có thể gặp phải với WebView.

Các vấn đề liên quan