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のスクロールからWebビューのスクロールを除外したいと思います。

@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の高さを与えませんでした。

編集:ありがとうみんなAkosCzは正しいです。

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 に答える