【发布时间】:2013-11-17 14:30:16
【问题描述】:
我在 Android (4.4) 的最后一次更新中遇到了一个奇怪的问题:我的 CSS 渲染在用户的屏幕上是可见的,这意味着我的 webview 内容在适应宽度之前非常薄:100% 的 CSS .
我正在使用 android.webkit.WebView 来显示这样的 html 字符串:
webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
这个 webview 的尺寸设置如下:
- 90% 的屏幕宽度用于 webview 宽度
- 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 父级不可见/消失,然后可见
但没有任何效果。 似乎只有当 webview 对用户可见时才会呈现 CSS。
我不能出于专业目的显示源代码,所以我只想对我可以搜索的位置有不同的看法(或者如果有人已经在 DDMS 中看到了这个奇怪的错误)
有人知道如何在显示此 webview 之前等待 CSS 在 webview 中呈现?
非常感谢
【问题讨论】:
-
我没有答案,但我只是好奇:即使
body的子元素div上的visibility: hidden也不会强制布局在显示之前进行计算? ? -
您的意思是,在一个 div 上添加
visibility: hidden并在 onload javascript 函数中将其删除?我只直接在身体上尝试过,而不是在孩子身上尝试过 -
是的,我的意思是(我会尝试使用 div,因为如果 body 被隐藏,它可能会“优化”掉计算)但坦率地说,如果它在 body 上不起作用,我不会计算它'将在 div 上工作...
-
我试过没有成功。我忘了提到的一件事是 webview 高度正在适应,所以我的细白线(这是我的 html 的背景)正在移动到 webview 的左上部分,而这个正在调整大小以包装内容。调整大小完成后,细白线消失,我看到我的内容就像在 Android 4.3 中一样
标签: android css webview android-webview android-4.4-kitkat