【问题标题】:Android webview doesn't finish rendering textAndroid webview没有完成呈现文本
【发布时间】:2016-08-19 01:54:39
【问题描述】:

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

问题是某些页面在某些设备上无法呈现文本。

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

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

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

我也尝试不断调用 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();
}

我现在很松散,因为我不知道为什么文本不呈现,而且我似乎无法强制它呈现。

【问题讨论】:

  • 我检测到没有出现onProgressChanged文字的页面卡在90了。
  • 我在白天工作了一些问题,我发现如果我删除自定义字体不会出现问题,但我需要使用自定义字体进行渲染,因为页面布局取决于他们。

标签: android text webview render


【解决方案1】:

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

另外,在销毁 webviews 时,我无法调用像 cancelTimer 这样的任何方法,这会导致在渲染其他具有类似字体的页面时出现问题。我唯一做的就是将引用指向 null。

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

【讨论】:

    【解决方案2】:

    这可能是由于 Android System Web View 的最新更新,该更新自动来自 Google Play。如果您卸载更新,它会有所帮助。这当然不是一个很好的解决方案(((( 另一种解决方法是在 web 视图中禁用硬件加速

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多