2016-04-25 11 views
1

Ich entwickle eine Anwendung, die etwas komplexes HTML-Rendering erfordert (im Grunde Text und Bilder, aber der Text kann einige erweiterte Funktionen wie benutzerdefinierte Schriftart und Pfad) und ich benutze Webviews zu render den Inhalt.Android Webview beendet nicht das Rendern von Text

Das Problem besteht darin, dass einige der Seiten Text in einigen Geräten nicht wiedergeben.

Ich bin mit allen drei Rückrufe:

  • onPageFinished;
  • onProgressChanged;
  • onNewPicture (veraltet, aber einige Benutzer zusammen, dass es funktioniert)

aber selbst wenn sie ausgelöst ich einen WebView bekommen, die den Text in den meisten Seiten fehlt. Auf einigen Geräten erscheint der Text, wenn ich die Webansicht berühre, aber es handelt sich um ein fehlerhaftes Verhalten, dem man nicht trauen kann.

Ich habe auch versucht, invalidate() ständig versucht, aber es zwingt nicht den Text zu zeichnen. Ich protokolliere die Webview-Konsole und anscheinend gibt es keinen Fehler (beachten Sie, dass manchmal der Text perfekt gerendert wird und das Problem für Seiten auftritt, die zuvor richtig gerendert wurden). Ich Konfiguration meine webview wie (ich weiß, dass einige Methoden sind veraltet, aber einige andere Lösungen zusammen, dass es für dann arbeitete):

offScreenWebView.layout(0, 0, viewPortWidth, viewPortHeight); 
offScreenWebView.getSettings().setUseWideViewPort(true); 
offScreenWebView.getSettings().setLoadWithOverviewMode(true); 
offScreenWebView.getSettings().setTextZoom(100); 
offScreenWebView.setDrawingCacheEnabled(true); 
offScreenWebView.getSettings().setJavaScriptEnabled(true); 
offScreenWebView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); 
offScreenWebView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND); 

if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { 
    offScreenWebView.enableSlowWholeDocumentDraw(); 
} 

ich locker bin jetzt, weil ich keine Ahnung habe, warum die Text rendert nicht und es scheint, ich kann es nicht zum Rendern zwingen.

+0

Ich habe festgestellt, dass die Seiten, in denen der Text nicht angezeigt wird die onProgressChanged bei 90 stecken. –

+0

I habe während des Tages ein paar Knicke gearbeitet und ich habe festgestellt, dass das Problem nicht auftritt, wenn ich die benutzerdefinierten Schriftarten lösche, aber ich muss mit benutzerdefinierten Schriftarten rendern, da das Seitenlayout von ihnen abhängt. –

Antwort

0

Ich habe es geschafft, mein Problem etwas zu lösen. Das Hauptproblem, das ich hatte, war, dass die Web-Views gleichzeitig geladen wurden (sie wurden bei einem View-Pager verwendet) und wahrscheinlich kam es zu einem Nebenläufigkeitsproblem, wenn die Web-Views die Schriftart geladen haben. Ich habe das Laden der URL gekapselt und sichergestellt, dass die Webviews jeweils eine Seite geladen wurden.

Auch beim Zerstören der Webviews konnte ich keine Methode wie cancelTimer aufrufen, dies führte zu Problemen beim Rendern anderer Seiten mit ähnlicher Schriftart. Das einzige, was ich getan habe, war, die Referenzen auf null zu setzen.

Es ist etwas langsam, aber es war zumindest die einzige Möglichkeit, konsistente Renderergebnisse mit den Webviews zu erhalten.

0

Dies ist wahrscheinlich aufgrund der neuesten Aktualisierung von Android System Web View, die automatisch von Google Play kommt. Wenn Sie das Update deinstallieren, hilft es. Es ist natürlich keine wirklich gute Lösung ((((( ) Eine andere Problemumgehung ist deaktivieren HW Beschleunigung in der Webansicht