怎样获取到Android控件的高度

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();
        }
    });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容