美文网首页
怎样获取到Android控件的高度

怎样获取到Android控件的高度

作者: 涛涛123759 | 来源:发表于2017-02-23 16:58 被阅读1439次

onCreate里面调用getWidth、getMeasuredWidth获得长宽值的,始终为0。在onCreate中。我们的控件事实上还并没有画好,换句话说,等onCreate方法运行完了,我们定义的控件才会被度量(measure),所以我们在onCreate方法里面通过view.getHeight()获取控件的高度或者宽度肯定是0。

方法一、

    int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    textView.measure(w, h);
    int height = textView.getMeasuredHeight();
    int width = textView.getMeasuredWidth();

方法二、
这种方法。我们须要注冊一个ViewTreeObserver的监听回调,这个监听回调,就是专门监听画图的,既然是监听画图,那么我们自然能够获取測量值了,同一时候。我们在每次监听前remove前一次的监听。避免反复监听。

   final ViewTreeObserver vto = textView.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            textView.getViewTreeObserver().removeOnPreDrawListener(this);
            int height = textView.getMeasuredHeight();
            int width = textView.getMeasuredWidth();
            return true;
        }
    });

方法三、
这种方法于第2个方法基本同样,但他是全局的布局改变监听器,所以是最推荐使用的。

    ViewTreeObserver vto1 = textView.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            textView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            int height = textView.getMeasuredHeight();
            int width = textView.getMeasuredWidth();
        }
    });

相关文章

网友评论

      本文标题:怎样获取到Android控件的高度

      本文链接:https://www.haomeiwen.com/subject/qeubwttx.html