web-dev-qa-db-fra.com

Problème de rendu WebView dans Android KitKat

Je travaille sur une application qui possède une vue Web dans laquelle une page statique est chargée à partir des ressources (en utilisant également JavaScript). Cette WebView ne fonctionne pas dans KitKat, elle reste vide. Je suis conscient du changement de moteur de rendu (webkit to chromium) qui s'est produit dans WebView dans KitKat et a essayé les étapes de la migration, qui est donnée dans la page Développeurs Android. Mais ça n'a pas aidé.

Dans logcat, je reçois une erreur qui provient de la source Chromium.

W/AwContents﹕ nativeOnDraw failed; clearing to background color.

Veuillez suggérer une solution de contournement.

36
gnuanu

Dans mon cas, sous Android 4.4, mon fond noir m'importait peu importe ce que j'avais défini et ce message d'erreur dans LogCat: nativeOnDraw a échoué; effacement à la couleur de fond.

D'après Google, cela semble être dû au fait que le rendu de l'espace de travail accéléré par le matériel n'est pas pris en charge dans Chromium WebView. J'ai ajouté cette ligne à la vue Web pour désactiver le canevas à accélération matérielle et cela fonctionne maintenant.

mWebview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
43
georgiecasey

J'ai rencontré le même problème, mais j'ai trouvé une solution de contournement. Tout ce que vous avez à faire est de définir explicitement un arrière-plan CSS pour votre page Web. Ainsi:

body {
  background: white;
}

S'il s'avère que si vous ne définissez pas explicitement l'arrière-plan d'une page Web, WebView ne pourra pas dessiner cet arrière-plan et vous obtiendrez une WebView transparente.

6
DataDino

Cela semble être un bug de chrome webview.

Voici un fil sur le problème: https://jira.appcelerator.org/browse/TIMOB-16479

Apparemment, la réponse acceptée n'est pas une solution sûre. Une solution de contournement est mentionnée dans le lien.

4
Tore Rudberg

La désactivation de l’accélérateur matériel a de lourdes conséquences sur les performances. Dans mon cas, j’ai découvert que cela m’était arrivé à KitKat lorsque j’étais en train d’instancier l’élément de visualisation Web dans une activité qui a été terminée et qui a été redémarrée par la suite. essai et erreur, quand j'ai ajouté: 

RelativeLayout layout = (RelativeLayout) findViewById(R.id.webViewContainer);
layout.removeAllViews();
webview.destroy();

Juste avant de mettre fin à l'activité, le problème semble résolu. Je ne l'ai pas encore testé sur de nombreux périphériques, mais si cette solution est appropriée, elle est de loin préférable à la désactivation de l'accélération matérielle pour KitKat pour la visualisation Web.

0
asiop