添加HTML后,防止WebView滚动到页面顶部

时间:2012-08-16 22:31:19

标签: java javascript android android-webview

我正在编写一个使用WebView显示内容的Android应用。该应用程序的主要目的是显示文本供用户阅读。

我通过JavaScript动态地将HTML添加到我的WebView中。将内容添加到页面底部时,这不是问题。将内容添加到顶部时,WebView会自动滚动到顶部。那是我的问题。

我需要尝试找到一种方法来阻止我的WebView在内容添加到顶部时自动滚动到页面顶部。

我确实有一些限制:

1)我正在使用JavaScript,但无法使用jQuery。

2)我目前仅限于Android API 8(v2.2)。

3)我不想只是回滚到原来的位置。 (我已经在SO上发现了许多解决方案,在这个问题中,我只是以编程方式滚动回滚动前的位置。我有一个当前的实现,但它不是一个平滑的过渡。)

4)我需要允许用户在添加内容时连续向上滚动。 (虽然我对禁用滚动以防止WebView自动滚动的实现持开放态度,但我需要允许用户继续向上滚动,同时我将内容添加到屏幕的高度左右。)

很抱歉,如果这似乎有限,但你可以看到为什么我需要一些建议。

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法。如果有人有另一个,特别是更直接的答案,我仍然会感兴趣。

我在某种程度上错误地诊断了我的问题。当我使用document.body.insertBefore(newDiv, topDiv.nextSibling);添加HTML时,我会在文档的上边缘下方添加新的HTML。

我以为我正在向上滚动到屏幕顶部(坐标[0,0]),但是文档长度正在改变,我当前的Y位置保持不变。所以我正在查看的坐标是不变的,但显示的坐标的HTML发生了变化。效果是“向上滚动”页面。

我最终在我的可见文字上方添加了一个巨大的空白区域。每次添加HTML时,它都会根据添加的HTML的精确高度缩小。这会抵消添加的文本,使我的可见屏幕保持完全相同。这意味着 NO 滚动,这是一个 很多 更流畅的用户界面。

这提供了一整套不同的设置,例如阻止用户滚动我的空白区域的整个长度,并确保我不会使我的WebView大于我的最大大小。然而,权衡取舍非常值得,因为用户体验得到了极大的改善。