1

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

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

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

我确实有一些限制:

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

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

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

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

对不起,如果这看起来很局限,但你可以明白为什么我需要一些建议。

提前谢谢了。

4

1 回答 1

1

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

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

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

我最终在可见文本上方添加了一个巨大的空白 div。每次我添加 HTML 时,它都会按添加的 HTML 的确切高度缩小。这抵消了添加的文本,使我的可见屏幕保持完全相同。这意味着没有滚动,这是一个更加流畅的 UI。

这提供了一套完全不同的解决方法,比如阻止用户滚动我的空白区域的整个长度,并确保我的 WebView 不会大于我的最大尺寸。不过,权衡是非常值得的,因为用户体验得到了极大的改善。

于 2012-08-21T16:47:23.287 回答