2010-12-11 49 views
9

我正在使用WebView來顯示包含一些基本上工作得很好的Flash內容的網頁。 最大的問題是,Flash內容似乎不考慮WebView的邊界:即使WebView太小而無法顯示完整頁面,Flash內容也不在WebView的邊界內,也會顯示Flash內容。此外,此Flash內容還會覆蓋WebView旁邊顯示的其他(本機)佈局元素。 對我來說,看起來,Flash內容呈現在(特殊)z層中,覆蓋了所有其他佈局元素。Android:Flash內容突破WebView邊界並重疊原生布局元素

經測試:Android 2.2和Flash 10.1。

這是Adobes Flash player 10.1中的一個已知錯誤嗎?

回答

3

我發現這個(6個月大)android的bug報告:http://code.google.com/p/android/issues/detail?id=8938 不幸的是,目前爲止還沒有解決方案,解決方法或評論。

在Adobe的bug跟蹤,我發現類似的bug(https://bugs.adobe.com/jira/browse/FP-4684)有以下評論:

您所描述的行爲是在Flash Player 10.1 Android平臺的一個 已知問題。今天,Flash 將始終顯示在HTML 內容之上。另外,當兩個 Flash內容重疊時, 呈現的順序是 不可預知。

此修復此問題,需要從Android和 Flash Player的球隊都 更新,並將於 在未來的版本中解決。

+0

+1對Flash 10.3和Android 2.3.4以上:(其 – ataulm 2011-08-13 23:43:46

+1

現在的一年,還是同樣的問題woth SWF和Android ...它傷心:( – 2012-03-25 11:42:50

+1

這樣的大公司的Adobe無法解析我們應該考慮不使用Flash ... – 2012-07-03 11:24:22

0

如果可以放棄Flash內容,則可以使用Websettings來禁用插件支持。

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); 

如果此代碼不會禁用Flash插件,你想運行您的應用程序VOR API < 8只刪除...

settings.setPluginsEnabled(true); 

...如果您在使用它你沒有將布爾設置爲false的Websettings - 這對我有用!我知道這種方法並不總是一個解決方案,但在我的情況下,它的工作原理是,因爲Flash內容只是一個不重要的橫幅。

4

我對閃存有同樣的問題。我發現閃光視圖添加setZOrderOnTop設置爲true。它會導致Flash在所有窗口上呈現(例如,覆蓋其他本地佈局元素)。

我有我自己的WebView類,我重寫了addView方法。當WebView添加任何視圖時,我會檢查它是否是Flash視圖(通過選中「com.adobe.flashplayer.FlashPaintSurface」)。如果是我將Z命令設爲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); 
} 

我這樣做是爲了每個addView方法。它適用於我,我想我會分享它。

1

今天我遇到了這個問題。我正在使用一些較舊的嵌入式閃存測試2.3.6。我喜歡pzyho的解決方案作爲快速修復,但我不想擴展WebView,必須對現有代碼進行重大更改。更快的解決方案是對任何給定的WebView使用setOnHierarchyChangeListener。

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

這是一個很好的解決問題的方法,我認爲重疊已經在較新版本的Android或Flash播放器中解決了,但是剛剛在我的薑餅上測試了您的想法設備(這對於某些重疊的設備來說是如此),它在第一次嘗試的時候就工作了,謝謝你在原來的問題年齡裏添加這個設備 – cgv 2013-04-20 22:59:02

+0

這不是一個完整的解決方案,它會導致一些Flash內容的背景顯示爲黑色(我認爲他們實際上顯示透明,黑色是窗口b ackground) – naw 2014-01-16 19:20:17