我有一个应用程序在 WebView 中显示来自资源资产的 html 页面。选择 WebView 是为了允许页面上的导航链接,并且所有导航操作都在 WebView 客户端类中处理,方法是中断新页面请求并返回所需的本地资产。包含 WebView 的 Activity 支持纵向和横向,WebView 在“onCreate”中配置(“setInitialScale”和“WebSettings”)。页面显示为适合宽度并且可垂直滚动。在 ICS 更新之前,这一直运行良好。
在 ICS 下,选择的初始页面仍然像以前一样显示,但显示的更多页面链接比屏幕宽度更宽(并且包括一个水平滚动条)。如果在加载初始页面时设备处于纵向或横向,则会发生这种情况。将设备旋转到横向并返回纵向可以解决问题(导致重新加载 Activity,就好像显示的页面是第一个页面一样),但是在纵向导航回到以前的页面会导致它们再次具有超过设备显示,即使返回到正确显示的主页。
这主要是一个烦恼 - 但不一致的行为令人担忧。不幸的是,还有一些与此代码相关的其他“调整”(主要是重新调整 html 中的图像大小以适应屏幕并在方向更改时保留 WebView 滚动位置)。虽然这些可能是当前问题的根源,但其结果的快速日志输出显示它们正在按预期工作,这表明 ICS WebView 行为发生了变化。
我已经搜索了该问题的任何类似帖子,但没有找到任何直接参考,所以我的问题真的很开放。有没有其他人在 ICS WebView 类中看到过类似的东西,还是我应该寻找改变行为的另一个来源?
更新:
在连续删除一行代码几个小时后(grrrr),我发现了问题。
在 android api 14 或更高版本下运行时,当视口固定在设备宽度时(使用元标记 name="viewport" content= html css 中的“width=device-width”)。初始页面加载似乎尊重设备宽度,但随后的页面加载可能会或可能不会以比请求更宽的视口呈现,几乎是随机的。
这可能是预期的行为,尽管不可预测性表明它不是(如果是,那么它是对先前版本行为的修复)。
使用的代码设置比例以允许用户在首选项中调整文本显示大小,页面图像的大小在页面加载之前被“固定”为代码中的值。这已被将页面比例保持在 100% 并使用“WebSettings.setDefaultFontSize”从用户的首选项中设置文本大小来取代,这消除了呈现问题。