14 votes

Transparent WebView ne fonctionne pas sur Android v4.0

Pour en savoir plus sur cette question, cliquez ici. Il s'agit de contourner un bogue connu dans Android où l'arrière-plan de la WebView doit être transparent. Le style de WebView Android background-color:transparent est ignoré sur Android 2.2

Il s'agit d'une WebView, qui héberge un document HTML avec un arrière-plan transparent, de sorte que la WebView est transparente et que le document HTML peut être superposé à d'autres vues.

L'ajout de la méthode suivante à la sous-classe WebView et son appel à partir du constructeur fonctionnent pour moi sur Android v2, v3 et v4, SAUF lorsque la hauteur en pixels du WebView est supérieure à la hauteur de l'écran en pixels (par exemple, le WebView est dans un ScrollView, donc plus long que l'écran).

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) {}
}

12voto

Alexandru Dragutu Points 111

J'ai rencontré le même problème et ce que j'ai trouvé, c'est qu'il s'agit d'un bug dans certaines versions d'Android concernant l'accélération matérielle. La réponse de Spiri ci-dessus fonctionne, mais j'avais besoin que ma WebView soit accélérée matériellement parce qu'elle doit lire des vidéos. Ce que j'ai trouvé fonctionne bien, c'est ce qui suit :

Au lieu d'utiliser

mWebView.setBackgroundColor(Color.TRANSPARENT);

Ce que j'ai utilisé, c'est

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

Cela a fonctionné sur tous les appareils Android sur lesquels je rencontrais ce problème auparavant.

9voto

Spiri Points 162

J'ai eu un problème similaire avec Android api level 16 et ceci l'a résolu :

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

Cela désactive l'accélération matérielle sur la vue conformément à la documentation : http://developer.Android.com/guide/topics/graphics/hardware-accel.html

Je sais que ce n'est pas la meilleure solution, mais comme il s'agit d'un problème connu, jusqu'à ce qu'ils trouvent une solution adéquate, celle-ci fait l'affaire (du moins pour moi).

1voto

Jared Points 76

J'ai passé quelques heures sur ce sujet l'autre jour et j'ai essayé toutes les réponses possibles et imaginables sur le sujet et j'ai fait des recherches moi-même. Je suis arrivé au même problème que vous, à savoir que si la vue Web pouvait défiler, elle ne serait pas transparente. Le seul moyen de la rendre transparente est de désactiver le rendu GPU dans Paramètres > Options du développeur. J'ai fini par vérifier si le rendu GPU était activé, puis j'ai réglé l'arrière-plan sur une couleur qui correspondait le mieux. Si vous trouvez une solution, je serais impressionné de l'entendre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X