Android 中获取某个控件的宽高

本文介绍了在Android开发中,由于控件在onCreate方法执行时还未完成测量,直接调用getWidth等方法会返回0的问题,并提供了三种有效获取控件宽度和高度的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

有好多朋友直接在onCreate里面调用getWidth、getMeasuredWidth来获取控件的高和宽,结果呢?始终都是0!为什么呢?因为我们的控件是画出来的,当我们在执行onCreate()的方法的时候,我们的控件还没有画出来,只有执行完onCreate()方法,我们定义的控件才会被度量(measure),所以是0.

办法

既然不能直接在onCreate里面调用getWidth、getMeasuredWidth方法,那怎么获取我们控件的高和宽呢?

这里有3个办法,这里我就简单来说一下

第一种:

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

这种方法会调用3次onMeasure()方法

第二种:

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

种方法会调两次onMeasure()方法

第三种:

ViewTreeObserver vto = imageView.getViewTreeObserver();     
        vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {   
            @Override     
            public void onGlobalLayout() {   
                imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);   
                imageView.getHeight();  
                imageView.getWidth();  
            }     
        });     

同方法二

选择

具体用哪个看实际项目吧,推荐使用方法三

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值