2010-12-11 15 views
9

Estoy usando un WebView para mostrar una página web que contiene contenido Flash que básicamente funciona bastante bien. El gran problema es que el contenido de Flash parece no tener en cuenta los límites de WebView: el contenido de Flash se muestra incluso si WebView es demasiado pequeño para mostrar la página completa y el contenido de Flash no está dentro de los límites de WebView. Además, este contenido Flash se superpone a otros elementos de diseño (nativos) que se muestran junto a WebView. Para mí, parece que el contenido de Flash se representa en (especial) z-Layer, que se superpone a todos los demás elementos de diseño.Android: el contenido de Flash rompe los límites de WebView y se superpone a los elementos de diseño nativos

Probado con Android 2.2 y Flash 10.1.

¿Es este un error conocido en Adobes Flash player 10.1?

Respuesta

3

Encontré esto (6 meses) informe de error de android: http://code.google.com/p/android/issues/detail?id=8938 Desafortunadamente, hasta el momento no hay soluciones, soluciones ni comentarios.

En seguimiento de errores de Adobe He encontrado un fallo similar (https://bugs.adobe.com/jira/browse/FP-4684) con el siguiente comentario:

El comportamiento que describes es un problema conocido en Flash Player 10.1 en la plataforma Android. Hoy, Flash siempre se mostrará sobre el contenido HTML . Además, cuando dos piezas de contenido Flash se superponen, el orden de en el que se representan es impredecible.

Esta solución para este problema se requiere actualizaciones tanto de la equipos Flash Player Android y, y estará dirigida en una versión futura.

+0

+1 para Flash 10.3, y Android 2.3.4 :( – ataulm

+1

su ahora un año anterior, todavía mismo problema SWF valió la pena y el androide ... es triste :( –

+1

una empresa tan grande Adobe no puede resolver este error en 2 años? Deberíamos considerar no usar Flash ... –

0

Si es posible abstenerse del contenido de Flash, puede usar el Websettings para deshabilitar la compatibilidad de complementos.

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

Si este código no desactiva el plugin flash y desea ejecutar su aplicación API vor < 8 acaba de eliminar ...

settings.setPluginsEnabled(true); 

... si su están utilizando en su Las configuraciones web sin configurar el bool en falso, ¡eso funcionó para mí! Sé que este enfoque no siempre es una solución, pero en mi caso funcionó, porque el contenido flash no era más que un banner sin importancia.

4

Tuve el mismo problema con el flash. Lo que descubrí es que la vista de flash se agrega con setZOrderOnTop establecido en verdadero. Hace que el flash se represente en la parte superior de todas las ventanas (por ejemplo, cubre otros elementos de diseño nativos).

Tenía mi propia clase WebView y anulé los métodos addView. Cuando WebView agrega cualquier vista, compruebo si se trata de una vista flash (marcando "com.adobe.flashplayer.FlashPaintSurface"). Si es que establecí el orden Z en falso:

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

Lo hago para cada método addView. Funciona para mí y pensé que lo compartiré.

1

Me encontré con este problema hoy. Estaba probando en 2.3.6 con un flash incrustado anterior.Me gustó la solución de Pzyho como una solución rápida, pero no quería extender WebView y tengo que hacer cambios significativos en el código existente. Una solución más rápida era usar setOnHierarchyChangeListener para cualquier WebView dado.

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

Esa es una manera fantástica de solucionar el problema. Creo que la superposición se ha resuelto en las versiones más nuevas de Android o en el reproductor flash pero acaba de probar tu idea en mi gingerbread dispositivo (que para cierto hace esta superposición) funcionó en el primer intento. ¡Gracias por agregar esto a pesar de la edad de la pregunta original! – cgv

+0

Esto no es una solución completa. Hace que algunos fondos de contenido flash aparezcan negros (creo que en realidad aparece transparente y negro es la ventana b ackground) – naw

Cuestiones relacionadas