Android webview无法完成呈现文本

时间:2016-04-25 15:14:08

标签: android text webview render

我正在开发一个需要稍微复杂的html渲染的应用程序(基本上是文本和图像,但文本可能有一些高级功能,如自定义字体和路径),我正在使用webview来呈现内容。

问题是某些页面中的某些页面不呈现文本。

我正在使用所有三个回调:

  • onPageFinished;
  • onProgressChanged;
  • onNewPicture(已弃用,但有些用户认为它有效)

但即使它们被触发,我也会得到一个缺少大多数页面文本的WebView。在某些设备上,当我触摸webview时会显示文本,但这是一种不可信任的不稳定行为。

我也经常尝试调用invalidate(),但它不强制文本绘制。我正在记录webview控制台,显然它没有抛出任何错误(请注意,有时文本会完美呈现,并且之前正确呈现的页面会出现问题)。我正在配置我的webview(我知道有些方法已被弃用,但其他一些与之相关的解决方案相关):

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

我现在处于松散状态,因为我不知道文本为什么不渲染,似乎我无法强制它渲染。

2 个答案:

答案 0 :(得分:0)

我设法解决了我的问题。我遇到的主要问题是由于webview同时被加载(它们在viewpager中被使用),并且当webviews加载字体时可能会出现一些并发问题。我封装了URL加载并确保webview一次加载一页。

此外,在销毁网页视图时,我无法调用任何方法(如cancelTimer),这会在渲染其他类似字体的网页时出现问题。我唯一做的就是将引用指向null。

它有点慢,但至少它是使用网​​页浏览获得一致渲染结果的唯一方法。

答案 1 :(得分:0)

这可能是由于Android系统网络视图的最新更新,该更新自动来自Google Play。如果卸载更新,则会有所帮助。这当然不是一个非常好的解决方案((( 另一种解决方法是在webview中禁用HW加速