2012-02-14 37 views
13

Một số nền cho câu hỏi này là ở đây. Nó liên quan đến việc làm việc xung quanh một lỗi đã biết trong Android, nơi nền WebView cần phải minh bạch. Android WebView style background-color:transparent ignored on android 2.2WebView trong suốt không hoạt động trên Android v4.0

Nó bao gồm WebView, lưu trữ tài liệu HTML với nền trong suốt, vì vậy WebView trong suốt và tài liệu HTML có thể được phủ lên các chế độ xem khác.

Thêm phương thức sau vào lớp con WebView và gọi nó từ hàm tạo hoạt động cho tôi trên Android v2, v3 và v4, EXCEPT khi chiều cao pixel của WebView lớn hơn chiều cao màn hình tính bằng pixel (ví dụ: WebView trong ScrollView, dài hơn màn hình).

protected void setBackgroundToTransparent() { 
    this.setBackgroundColor(Color.TRANSPARENT); 
    this.setBackgroundDrawable(null); 
    if (Build.VERSION.SDK_INT >= 11) // Android v3.0+ 
     try { 
     Method method = View.class.getMethod("setLayerType", int.class, Paint.class); 
     method.invoke(this, 1, new Paint()); // 1 = LAYER_TYPE_SOFTWARE (API11) 
     } catch (Exception e) {} 
} 
+0

Có câu hỏi nào ở đây hay bạn có thể trả lời câu hỏi đó trong chính câu hỏi đó? –

+0

Tôi nghĩ rõ ràng rằng câu hỏi là làm cách nào để tôi giải quyết vấn đề để WebView trong suốt hoạt động chính xác. –

+0

Vì vậy, câu hỏi đặt ra là làm thế nào để nó làm việc cũng cho ngoại lệ? Dù sao, nó có vẻ làm việc khi tôi thử nó ra trong mô phỏng ngay cả trên 4.0. –

Trả lời

1

Tôi dành một vài giờ vào ngày này và thử mọi câu trả lời có thể về chủ đề cũng như tự mình điều tra nội dung. Tôi đã đến cùng một vấn đề của bạn, nếu webview có thể cuộn được thì nó sẽ không trong suốt. Cách duy nhất tôi có thể làm cho nó minh bạch là nếu tôi tắt hiển thị GPU trong Cài đặt> Tùy chọn nhà phát triển. Tôi cuối cùng chỉ làm một kiểm tra cho nếu dựng hình gpu đã được kích hoạt và sau đó thiết lập nền cho một số màu sắc phù hợp nhất. Nếu bạn nghĩ ra một giải pháp, tôi sẽ rất ấn tượng khi nghe nó.

+0

Xem ở trên.Ngoài ra, bạn không thể buộc tất cả người dùng của mình kích hoạt hiển thị GPU. – bluewhile

9

Tôi đã có một vấn đề tương tự với api mức android 16 và điều này giải quyết nó:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 'view' is a WebView 

này vô hiệu hóa khả năng tăng tốc phần cứng trên quan điểm theo các tài liệu: http://developer.android.com/guide/topics/graphics/hardware-accel.html

Tôi biết rằng nó không phải con đường để đi, nhưng vì đây là một vấn đề được biết đến, util họ đưa ra một giải pháp thích hợp, điều này thực hiện công việc (ít nhất là đối với tôi).

10

Tôi đã gặp phải vấn đề tương tự và những gì tôi thấy là đây là lỗi trong một số phiên bản Android liên quan đến tăng tốc phần cứng. Câu trả lời của Spiri ở trên hoạt động, nhưng tôi cần WebView của tôi được tăng tốc phần cứng vì nó cần phát video. Những gì tôi thấy hoạt động tốt, như sau:

Thay vì sử dụng

mWebView.setBackgroundColor(Color.TRANSPARENT); 

Những gì tôi được sử dụng là:

mWebView.setBackgroundColor(Color.argb(1, 255, 255, 255)); 

này làm việc trên tất cả các thiết bị Android, nơi trước đây tôi đã có vấn đề này .

+1

Điều này giống như một bugfix, bạn không đặt alpha thành 0 nhưng thành 1 (từ 255), gần như vô hình nhưng phần cứng vẫn sẽ hiển thị nó. – bluewhile

+0

bạn là thiên tài –

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