10

I want to determine the width and the height of the WebView. I have already tried it using:

webView.getWidth();
webView.getHeight();

but the resulting log always shows them to be 0.

4

12 回答 12

5

这是一个更优雅的解决方案

public void onCreate(Bundle savedInstanceState) {


        webView = (WebView) findViewById(R.id.webView1);

        webView.addOnLayoutChangeListener(new OnLayoutChangeListener() {

            @Override
            public void onLayoutChange(View v, int left, int top, int right,int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                 int w= webView.getWidth();
                 int h= webView.getHeight();


            }
        });



    }   
于 2014-03-20T16:41:12.793 回答
2

您可能过早地检查尺寸,很可能在onCreate. 相反,试试这个:

webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView webView, String url) {
                super.onPageFinished(webView, url);
                Log.i(TAG, findViewById(R.id.my_component).getWidth(););
            }
        });
于 2010-12-19T01:48:55.217 回答
2

对于任何仍在挣扎的人。使用这些方法来获取 webview 的高度和宽度。

computeHorizontalScrollRange(); -> for width 
computeVerticalScrollRange(); -> for height
于 2013-08-16T09:10:07.313 回答
2

使用oronPageFinished时,回调方法不起作用。我在Andromedev上看到了另一个使用 JavaScript 的解决方案,但我不相信这是最好的方法。loadDataloadDataWithBaseURL

于 2012-04-24T02:40:26.973 回答
1

嗯 - 我查看了 WevView 源代码,我可以看到他们在内部使用 View#getWidth 和 View#getHeight 这是WebView的私有方法之一:

/*
 * Return the width of the view where the content of WebView should render
 * to.
 */
private int getViewWidth() {
    if (!isVerticalScrollBarEnabled() || mOverlayVerticalScrollbar) {
        return getWidth();
    } else {
        return getWidth() - getVerticalScrollbarWidth();
    }
}

如评论中所述,您必须确保在分配活动布局后对其进行测量,例如setContentView(R.layout.mylayout);

于 2009-10-23T18:03:42.460 回答
1

您过早地检查 webview 的大小。你可以试试下面的方法

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    // TODO Auto-generated method stub
    super.onWindowFocusChanged(hasFocus);
            webView.getWidth();
            webView.getHeight();
}
于 2013-07-31T11:01:03.620 回答
1

我使用了一种解决方法,而不是从 DisplayMetrics 获取不可靠的 webview,假设您的 webview 宽度几乎等于手机屏幕尺寸,高度几乎等于手机屏幕尺寸的高度。

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = (int) displayMetrics.heightPixels*0.9;
int width = displayMetrics.widthPixels;
于 2019-01-04T22:07:29.807 回答
1

加载 HTML 后,您需要 WebView CONTENTS 的宽度和高度。是的,但是没有 getContentWidth 方法(只有一个视口值),并且 getContentHeight() 不准确!

答:子类WebView:

/*
  Jon Goodwin
*/
package com.example.html2pdf;//your package

import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;

class CustomWebView extends WebView
{
    public int rawContentWidth   = 0;                         //unneeded
    public int rawContentHeight  = 0;                         //unneeded
    Context    mContext          = null;                      //unneeded

    public CustomWebView(Context context)                     //unused constructor
    {
        super(context);
        mContext = this.getContext();
    }   

    public CustomWebView(Context context, AttributeSet attrs) //inflate constructor
    {
        super(context,attrs);
        mContext = context;
    }

    public int getContentWidth()
    {
        int ret = super.computeHorizontalScrollRange();//working after load of page
        rawContentWidth = ret;
        return ret;
    }

    public int getContentHeight()
    {
        int ret = super.computeVerticalScrollRange(); //working after load of page
        rawContentHeight = ret;
        return ret;
    }
//=========
}//class
//=========
于 2016-07-24T19:23:29.283 回答
0

我有同样的问题。我只是将initWebView方法放在onWindowFocusChangedt中。

public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    initWebView();
}


private void initWebView(){
    if(isOnline()){
        venueWebView = (WebView) findViewById(R.id.venueWebView);
        String url = "some url";
        int viewWight = venueWebView.getWidth();
        int viewHeight = venueWebView.getHeight();
        venueWebView.loadUrl(url);
    }
于 2014-11-14T16:55:31.220 回答
0

如果您想获得 The Height 和 Width 加载时间,您无法获得它,因为加载时间无法获得它。我建议使用 webview Touchevent 并获取高度和宽度。否则使用另一个视图单击事件并获取高度和宽度。

webView.getWidth();
webView.getHeight();

用这个。

于 2012-08-16T07:27:02.963 回答
0

我希望我的回答对某人有所帮助。

如果您想webview在内容加载后获得高度,那么这可能会有所帮助。

ViewTreeObserver viewTreeObserver  = mWebView.getViewTreeObserver();
viewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() {
 @Override
 public boolean onPreDraw() {                                
     int height = mWebView.getMeasuredHeight();
        if( height != 0 ){
      Toast.makeText(getActivity(),"height:"+height,Toast.LENGTH_SHORT).show();
                             mWebView.getViewTreeObserver().removeOnPreDrawListener(this);
                       }
                       return false;
               }
       });
于 2015-03-21T14:17:37.747 回答
0

如果您想在加载内容后获取原始高度,可以使用以下代码。尽管该代码已被弃用,但它可以完美运行。

webview.setPictureListener(new WebView.PictureListener() {
        @Override
        public void onNewPicture(WebView webView, @Nullable Picture picture) {
            int height = webview.getContentHeight();
            int height1 = webview.getMeasuredHeight();
            int height2 = webview.getHeight();
        }
    });
于 2019-12-12T11:07:48.587 回答