1

我在我的 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 是对的。

4

2 回答 2

3

尝试getMeasuredHeight()方法。在布局过程的测量通过后,它可用于所有视图对象。

查看以下 URL 中的文档以获得更详细的说明,特别是以下部分:

  • 大小、填充和边距
  • 布局

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

于 2012-05-02T16:55:44.033 回答
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;
}
});
于 2015-03-21T14:25:57.897 回答