使用View.getWidth()方法出现的问题及解决方法

因为最近在做屏幕的适配,经常会使用view.getWidth()方法来计算控件的位置。今天出现了一个问题,第一次调用此方法计算,结果为0,第二次调用就能获取到控件的宽了。

         去网上查了很久,问题的原因很快就了解了,但是合适的解决办法却迟迟找不到,当然问题最终解决了,但是为了不浪费我的辛苦努力,将其发到博客上。

 

         原因:表面原因是getWidth()得到是某个view的实际尺寸,需要在他的父布局加载此view之后才能获取到值。实际原因是因为我们一般希望在控件的构造方法中获取它的宽高,但是只有onDraw()方法之后才能获取到,在构造方法中onDraw是很占内存的,所以大部分控件肯定不会这么写的。

        解决方法:想要第一次就获取getWidth(),尝试过很多方法都没效果,只能放弃。后来发现另外一个方法getMeasuredWidth(),但是需要在使用前先调用measure(0,0)方法让其绘制,如果不调用此方法,获取到的结果和getWidth()一样。

 

总结:

view.measure(0,0)

view.getMeasuredWidth()

可以获取view的宽,不会有任何问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值