2010-12-11 38 views
9

Tôi đang sử dụng WebView để hiển thị một trang web có chứa một số nội dung Flash về cơ bản hoạt động khá tốt. Vấn đề lớn là, nội dung Flash dường như không xem xét các giới hạn của WebView: Nội dung Flash được hiển thị ngay cả khi WebView quá nhỏ để hiển thị trang đầy đủ và nội dung Flash không nằm trong giới hạn của WebView. Ngoài ra, nội dung Flash này chồng lên các phần tử bố cục khác (gốc) được hiển thị bên cạnh WebView. Với tôi, có vẻ như, nội dung Flash được hiển thị trong lớp z đặc biệt, phủ lên tất cả các phần tử bố cục khác.Android: Phá vỡ nội dung Flash Giới hạn của WebView và chồng chéo các yếu tố bố cục gốc

Được thử nghiệm với: Android 2.2 và Flash 10.1.

Đây có phải là lỗi đã biết trong trình phát Adobes Flash 10.1 không?

Trả lời

3

Tôi tìm thấy báo cáo lỗi android này (6 tháng): http://code.google.com/p/android/issues/detail?id=8938 Thật không may cho đến nay không có giải pháp, cách giải quyết hoặc nhận xét nào.

Trong bug tracker của Adobe Tôi tìm thấy một lỗi tương tự (https://bugs.adobe.com/jira/browse/FP-4684) với những nhận xét sau đây:

Các hành vi bạn đang mô tả là một vấn đề được biết đến trong Flash Player 10.1 trên nền tảng Android. Hôm nay, Flash sẽ luôn hiển thị trên đầu trang của nội dung HTML . Ngoài ra, khi hai phần của Nội dung Flash bị chồng chéo, thứ tự mà chúng được hiển thị là không thể đoán trước.

Khắc phục sự cố này sẽ yêu cầu nội dung cập nhật từ cả Android và đội Flash Player và sẽ là được giải quyết trong bản phát hành trong tương lai.

+0

+1 cho Flash 10.3, và Android 2.3.4 :( – ataulm

+1

của nó bây giờ là một năm ở trên, vẫn cùng một vấn đề woth SWF và android ... buồn :( –

+1

một công ty lớn như vậy nó Adobe không thể giải quyết Lỗi này trong 2 năm tới? Chúng ta nên xem xét không sử dụng Flash ... –

0

Nếu có thể tránh nội dung Flash, bạn chỉ có thể sử dụng Websettings để tắt hỗ trợ plugin.

webView = (WebView) findViewById(R.id.webview); 
    WebSettings settings = webView.getSettings(); 
    // deprecated only for API < 8 
    settings.setPluginsEnabled(false); 
    // for API > 8 recommended 
    settings.setPluginState(PluginState.OFF); 

Nếu mã này không vô hiệu hóa các plugin flash và bạn muốn chạy vor API App của bạn < 8 chỉ cần xóa ...

settings.setPluginsEnabled(true); 

... nếu bạn đang sử dụng nó trong bạn Các thiết lập web mà không đặt bool thành false - đã làm việc cho tôi! Tôi biết rằng cách tiếp cận này không phải lúc nào cũng là một giải pháp, nhưng trong trường hợp của tôi nó hoạt động, bởi vì nội dung flash chỉ là một biểu ngữ không quan trọng.

4

Tôi gặp vấn đề tương tự với flash. Những gì tôi phát hiện ra là chế độ xem flash được thêm với setZOrderOnTop được đặt thành true. Điều này khiến cho flash được hiển thị trên tất cả các cửa sổ (ví dụ: bao gồm các phần tử bố cục gốc khác).

Tôi đã có lớp WebView của riêng mình và tôi đã ghi đè phương thức addView. Khi WebView thêm bất kỳ chế độ xem nào tôi kiểm tra xem đó có phải là chế độ xem flash hay không (bằng cách kiểm tra "com.adobe.flashplayer.FlashPaintSurface"). Nếu tôi đặt Z order thành false:

@Override 
public void addView(View child, int index) 
{ 
    if (child.getClass().getName().equals("com.adobe.flashplayer.FlashPaintSurface")) 
    { 
     ((SurfaceView)child).setZOrderOnTop(false); 
    } 

    super.addView(child, index); 
} 

Tôi làm điều đó cho mọi phương thức addView. Nó làm việc cho tôi và tôi nghĩ rằng tôi sẽ chia sẻ nó.

1

Tôi đã gặp sự cố này ngày hôm nay. Tôi đã thử nghiệm trên 2.3.6 với một số flash nhúng cũ hơn.Tôi thích giải pháp của pzyho như là một sửa chữa nhanh chóng nhưng tôi không muốn mở rộng WebView và phải thực hiện những thay đổi đáng kể cho mã hiện có. Một giải pháp nhanh hơn là sử dụng setOnHierarchyChangeListener cho bất kỳ WebView cụ thể nào.

myWebView.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() { 
     @Override 
     public void onChildViewRemoved(View parent, View child) {} 
     @Override 
     public void onChildViewAdded(View parent, View child) { 
      if(child.getClass().getName().equals("com.adobe.flashplayer.FlashPaintSurface")) 
       ((SurfaceView)child).setZOrderOnTop(false); 
     } 
}); 
+0

Đó là một cách tuyệt vời để khắc phục sự cố. Tôi nghĩ rằng sự chồng chéo đã được giải quyết trong các phiên bản mới hơn của Android hoặc trình phát flash nhưng vừa thử nghiệm ý tưởng của bạn trên bánh gừng của tôi thiết bị (mà cho một số nhất định này chồng lên nhau) nó làm việc trên thử đầu tiên.Cảm ơn bạn đã thêm điều này mặc dù câu hỏi ban đầu tuổi! – cgv

+0

Đây không phải là một giải pháp hoàn chỉnh.Đó gây ra một số hình nền của nội dung flash xuất hiện màu đen (tôi nghĩ rằng họ thực sự xuất hiện trong suốt và màu đen là cửa sổ b ackground) – naw

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