5

我在 Android (4.4) 的最后一次更新中遇到了一个奇怪的问题:我的 CSS 渲染在用户的屏幕上是可见的,这意味着我的 webview 内容在适应 CSS 的宽度:100% 之前非常薄。

我正在使用 android.webkit.WebView 来显示这样的 html 字符串:

webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);

此 webview 具有以下大小集:

  • webview 宽度的屏幕宽度的 90%
  • webview 高度的 WRAP_CONTENT

CSS 是为适应 webview 宽度而构建的,然后高度会自行调整。css 中没有设置绝对宽度或高度。

当我显示我的 webview(它已经完全加载,因为我使用 onPageFinished 回调来知道加载完成)时,CSS 开始呈现。这让我感到惊讶,因为我认为它应该在我加载 webview 时呈现。问题是对于用户来说,会显示一条非常小的白线,然后这条线会自行调整以匹配 webview 设置。

如果我在 CSS 中修复宽度,我没有任何渲染问题。但我不能这样做,因为我想匹配所有屏幕尺寸。

在 Android 4.4 之前没有任何问题,因为在 CSS 完全渲染之前屏幕上没有显示任何内容。

顺便说一句,我正在使用 webview 中的 setPictureListener() 方法。我知道这种方法已被弃用(并且已经过时了一段时间),但这是知道 webview 何时真正完成在屏幕上“绘制”的唯一方法。如果我在 Android 4.4 中使用此方法,它会被多次调用,并且 DDMS 中会出现此错误:

W/UnimplementedWebViewApi(23891): Unimplemented WebView method run called from: android.os.Handler.handleCallback(Handler.java:733)

我不知道是否有直接关系,我认为即使不使用这种方法,我的 CSS 也没有正确呈现。

我尝试了很多东西:

  • 使用 javascript onload 使主体可见
  • 在 webview 上使用 chrome 客户端并等待进度达到 100% 以使我的 webview 可见
  • 使用 webview 客户端并等待 onPageFinished 使我的 webview 可见
  • 使用 PictureListener 使我的 web 视图可见时使用 500 毫秒的 postDelayed
  • 使用所有图层类型选择:硬件/软件/无
  • 让我的 webview 父母首先 INVISIBLE / GONE 然后 VISIBLE

但没有任何效果。似乎只有当 webview 对用户可见时才会呈现 CSS。

我不能出于专业目的显示源代码,所以我只想对我可以搜索的位置有不同的看法(或者如果有人已经在 DDMS 中看到了这个奇怪的错误)

有人知道如何在显示此 webview 之前等待 CSS 在 webview 中呈现吗?

非常感谢

4

1 回答 1

1

我设法解决了这个问题。

display: table;的 HTML 的主 div 的样式有一个,删除它会使我的渲染看起来不错。

由于它在 Android 以前的版本中运行良好,我无法确定它是 webview 的错误,还是我的 CSS 中的问题。

顺便说一句,感谢您查看我的问题

于 2013-11-07T02:43:33.133 回答