怎样获取到Android控件的高度

本文介绍了在Android应用创建阶段如何获取控件测量值的方法:1. 使用MeasureSpec临时设置;2. 注册ViewTreeObserver监听预绘制;3. 使用全局布局监听器。避免在控件绘制前尝试获取尺寸。
摘要由CSDN通过智能技术生成

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 vto = textView.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            textView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            int height = textView.getMeasuredHeight();
            int width = textView.getMeasuredWidth();
        }
    });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值