2

我的目标是创建一个具有小范围的 WebView,并让它平滑地动画到预定的宽度和包含其内容所需的任何高度,以给人一种扩大到完整尺寸的印象。

我不希望 WebView 的内容在动画期间重复重新布局,所以我尝试将视口宽度设置为动画的最终宽度。我通过添加实现了这一点

<meta name="viewport" contents="width=X" />

其中 X 是我想要的宽度。另外我用过:

WebSettings settings = webView.getSettings();
settings.setUseWideViewPort(true);
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);

确保使用了视口标签,并且我的内容将超出我的 webview 的范围。

这有效(尽管只有当我不用wrap_content作我的任何一个 WebView 尺寸的布局参数时)。问题是当我将视口扩展到 WebView 的宽度之外时,它的内容高度会按比例扩展。

例如,如果我创建一个空项目,该项目启动一个包含 350x200px 的 WebView 的活动,然后调用:

webview.loadData("<html><head><meta name=\"viewport\" content=\"width=450\" /></head></html>");

结果将是一个空的 WebView,宽度为 450 css 像素,内容高度为 257 设备像素。257 似乎来自 200 * 450 / 350。

经过实验,似乎在加载具有超出其宽度的视口的WebView后,内容高度将始终是布局内容所需的高度和WebView的高度乘以视口的宽度除以WebView的宽度的最大值。

此外,如果在此布局发生后我增加了 WebView 的高度,contentHeight 也会按比例增加。所以,此时,无论我的 WebView 有多大,它都会在内容下方有一个空的可滚动空间。

所以,我有两个问题。首先,在布局发生后,我找不到合适的 WebView 最终高度,因为内容高度现在表示高度*(viewport_width/width)而不是内容布局的高度。其次,即使我可以确定 WebView 的适当高度,如果我设置了这个高度,那么 WebView 将在我的内容下方包含更多空白空间。

我尝试在元标记中设置视口的高度属性,这似乎没有任何效果。我假设这个问题是由于 WebView 在放大时不想改变视口的纵横比。有谁知道解决这个限制的任何方法?有没有什么方法可以在不垂直滚动的情况下实现水平滚动?

感谢您的任何帮助或建议!

4

0 回答 0