我在 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 中呈现吗?
非常感谢