Android获得WebView高度

时间:2012-05-02 15:42:28

标签: android android-layout android-webview

我在我的XML中定义了WebView:

<WebView
    android:id="@+id/streetview_webview"
    android:layout_width="match_parent"
    android:layout_height="164dp"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/header" />

现在我想在我的代码中获取此WebView的高度,以排除滚动我的CustomViewPager的webview滚动

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    if (childId > 0) {
        View webv = findViewById(R.id.webView1);
        if (webv != null) {
            int x = webv.getLeft();
            int x2 = x + webv.getLayoutParams().width;

            int y = webv.getTop();
            int y2 = y + webv.getMeasuredHeight();

            int targetx = (int) event.getX();
            int targety = (int) event.getY();

            if (targetx > x && targetx < x2 && targety > y && targety < y2) {
                return false;
            }
        }
    }
    return super.onInterceptTouchEvent(event);
}

我试过了

webv.getHitRect但这会获得父级的高度(整个屏幕)

webv.getLayoutParams().width; // <- working
webv.getLayoutParams().height; // -1

webv.getHeight

但他们都没有让我达到164dp的高度。

编辑:谢谢家伙Akos Cz是对的。

2 个答案:

答案 0 :(得分:3)

尝试使用getMeasuredHeight()方法。在布局过程的度量传递之后,它在所有View对象上可用。

请查看以下网址的文档以获取更详细的说明,尤其是以下部分:

  • 尺寸,填充和边距
  • 布局

http://developer.android.com/reference/android/view/View.html

答案 1 :(得分:0)

要在加载内容后获得webview的高度,那么这行代码可以帮助您。

ViewTreeObserver viewTreeObserver  = webview.getViewTreeObserver();
viewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() {
    @Override
    public boolean onPreDraw() {                                
     int height = webview.getMeasuredHeight();
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(webview.getLayoutParams());

     if( height != 0 ){
 Toast.makeText(DesignTemplateView.this,"height:"+height,Toast.LENGTH_SHORT).show();
 webview.getViewTreeObserver().removeOnPreDrawListener(this);
    }
      return false;
}
});