首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android WebView getContentHeight()总是返回0

Android WebView getContentHeight()总是返回0
EN

Stack Overflow用户
提问于 2014-04-16 04:10:01
回答 4查看 9.4K关注 0票数 7

我正在实现一个WebView,这样它就可以根据内容高度调整其高度。我试着做了以下事情:

代码语言:javascript
运行
复制
WebView view = new WebView(context);
view.loadData(htmlString, "text/html", "utf-8");

view.setWebViewClient(new WebViewClient() {
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        Log.d("2", view.getContentheight() + "");
        // Set the height of the webview to view.getContentHeight() here?
    }
});

Log.d("1", view.getContentHeight() + "");

其中htmlString是一个超文本标记语言格式的字符串。

但是,这两个日志都返回0。

我不确定我是否在做正确的事情。我如何知道内容的高度,然后相应地设置WebView的高度?

EN

回答 4

Stack Overflow用户

发布于 2014-04-16 16:46:47

这是因为onPageFinished回调意味着WebView已经完成了从网络读取字节,仅此而已。在触发onPageFinished的时候,页面甚至可能还没有被解析。

如果你的webview的高度设置为wrap_contents,那么你可以这样做:

代码语言:javascript
运行
复制
WebView v = new WebView() {
    @Override
    public void onSizeChanged(int w, int h, int ow, int oh) {
        super.onSizeChanged(w, h, ow, oh); // don't forget this or things will break!
        Log.d(TAG, "WebView height" + getContentHeight());
    }
};

如果你的webview不是wrap_contents,那么一种选择是按照josedlujan在his answer中对这个问题的建议,从JavaScript获取高度。

另一种选择是使用不推荐使用的PictureListener

代码语言:javascript
运行
复制
webview.setPictureListener(new PictureListener() {
    int previousHeight;
    @Override
    public void onNewPicture(WebView w, Picture p) {
        int height = w.getContentHeight();
        if (previousHeight == height) return;
        previousHeight = height;
        Log.d(TAG, "WebView height" + height); 
    }
});
票数 12
EN

Stack Overflow用户

发布于 2017-06-30 13:05:31

下面是在视图加载完成时获取webview滚动高度的工作代码:

代码语言:javascript
运行
复制
WebView webviewPageTest=new WebView(this);
webviewPageTest.getSettings().setJavaScriptEnabled(true);
class JsObject {
    @JavascriptInterface
       public void toString(String jsResult) {
           Log.v("scrolH:",jsResult);
           //use this if you need actual onscreen measurements 
           //float webViewHeight = (Integer.parseInt(jsResult) * getResources().getDisplayMetrics().density);
       }
    }

webviewPageTest.addJavascriptInterface(new JsObject(), "HTMLOUT");
webviewPageTest.setWebViewClient(new WebViewClient() {
    public void onPageFinished(WebView view, String url) {
        view.loadUrl("javascript:( function () { var h = document.body.scrollHeight; window.HTMLOUT.toString(h); } ) ()");
        }
    });

this.addContentView(webviewPageTest, params);

在这里Łukasz Sromek和josedlujan上面和这里android dev docs

票数 2
EN

Stack Overflow用户

发布于 2014-04-16 06:37:15

您可以使用javascript从webview获取高度和宽度。

代码语言:javascript
运行
复制
WebView view = new WebView(context);
view.loadData(htmlString, "text/html", "utf-8");
view.getSettings().setJavaScriptEnabled(true);
view.setSaveEnabled(true);
view.addJavascriptInterface(new JavaScriptInterface(), "HTMLOUT");
view.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url){
  view.loadUrl("javascript:window.HTMLOUT.getContentHeight
        (document.getElementByTagName('html')") 
    }
});
view.loadDataWithBaseURL(null,htmlString,"text/html","utf-8,null");

   }



 class JavascriptInterface{
   public void getContentHeight(String value){
       if (value != null){
          webviewContentHeight = Integer.parseInt(value);
             Log.d(LOG_TAG("result from js"+webviewContentHeight);
             Toast.makeText(activity,"Content Height is:"+webviewContentHeight,
                     Toast.LENGTH_SHORT).show();
           }
       }
   }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23093513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档