如何在其中添加数据后调整Android webview的大小

17 layout android webview

在布局(线性,垂直)层次结构中,我有几个视图,其中一个是WebView.它们都有相同的参数:

android:layout_width="fill_parent"
android:layout_height="wrap_content"
Run Code Online (Sandbox Code Playgroud)

对于所有视图,正确处理元素之间的间距,但对于Webview,在显示的文本内部之后有很多空格.

我使用布局在活动的"onCreate"方法中设置webview的(HTML)文本.

有没有办法让webview自行调整大小,以匹配其内容大小?

顺便说一下,左边的空间因设备而异(模拟器与Milestone vs Hero)

任何的想法?谢谢

小智 21

我确信现在为时已晚,但添加了适合我的方法,以防有人来这里寻找解决方案.

一旦页面完成加载,我正在注入一个javascript方法来回调我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)));
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这里也可以看到相同的解决方案.

  • 似乎如果您的内容高度大于最大可见的“WebView”高度,并且您将尝试将此更大的高度值设置为“LayoutParams” - 您的“WebView”将完全消失。 (3认同)

Jan*_*usz 6

现在看来,如果内容太大,Webview只会自行调整大小.如果webview更大,那么内容不会收缩以回收空间.

  • 对,关于如何强迫它的任何想法都会调整大小呢? (10认同)

小智 6

我有同样的问题。我通过改变 WebView 的可见性来解决。

mWebView.setVisibility(View.GONE);
mWebView.loadData(".....");
mWebView.reload();
mWebView.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)


eJa*_*Jal 5

经过几个小时的搜索和尝试,我找到了最简单的工作解决方案。只需将其称为“重绘”:

webView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
Run Code Online (Sandbox Code Playgroud)

对于我的 webview,它在 scrollView 中完美运行。如果您不想使用 WRAP_CONTENT,您可以使用您自己的参数。