安卓 WebView 在底部添加奇怪的空白间隙

6
我正在尝试使用 JavaScript 给加载的 WebView 添加更多空白间隔。我使用 loadDataWithBaseUrl() 从 String 资源中加载数据。然后,在测量一些内容后,如果需要增加 WebView 的大小,则可以通过调用 JavaScript 函数来实现,例如增加 100 像素。
mWebView.loadUrl("javascript:addHeight()");

Javascript函数在原始的HTML中定义:

function addHeight() { " +
    var elemDiv = document.createElement('div');
    elemDiv.style.cssText = 'height:100px;'; 
    document.body.appendChild(elemDiv); 
} 

之后,WebView 会重新调整大小以适应新的内容。但是,得到的高度不是原始大小 +100px,而是更大。我不知道问题出在哪里。我无法确定目标大小,因为它取决于添加的 div 的大小,并且它将始终不同。
有人尝试过这个吗?您是否熟悉这种行为?

可能是如何根据其内容动态缩小WebView大小?的重复问题。 - e4c5
“resulting height”指的是WebView视图元素(在Android端)的高度,还是由JavaScript代码中的window.innerHeightwindow.outerHeight报告的页面尺寸? - Mikhail Naganov
这不是一个清晰的问题,请展示你的JavaScript addHeight()代码。 - ProllyGeek
1个回答

2
找到了下一个解决方案。它使用了JS回调函数。我希望这能帮到你。这种尺寸变化比动态更好。
    private void setupWebView() {
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            webView.loadUrl("javascript:MyApp.resize(document.body.getBoundingClientRect().height)");
            super.onPageFinished(view, url);
        }
    });
    webView.addJavascriptInterface(this, "MyApp");
}
@JavascriptInterface
public void resize(final float height) {
    MyActivity.this.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            webView.setLayoutParams(new LinearLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density)));
        }
    });
}

请查看本列表的第4段内容。祝你好运!


2
使用Android 5.1.1,似乎什么都没有发生 - 设置LayoutParams根本不会改变WebView。 - Hawk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接