因为最近在做屏幕的适配,经常会使用view.getWidth()方法来计算控件的位置。今天出现了一个问题,第一次调用此方法计算,结果为0,第二次调用就能获取到控件的宽了。
去网上查了很久,问题的原因很快就了解了,但是合适的解决办法却迟迟找不到,当然问题最终解决了,但是为了不浪费我的辛苦努力,将其发到博客上。
原因:表面原因是getWidth()得到是某个view的实际尺寸,需要在他的父布局加载此view之后才能获取到值。实际原因是因为我们一般希望在控件的构造方法中获取它的宽高,但是只有onDraw()方法之后才能获取到,在构造方法中onDraw是很占内存的,所以大部分控件肯定不会这么写的。
解决方法:想要第一次就获取getWidth(),尝试过很多方法都没效果,只能放弃。后来发现另外一个方法getMeasuredWidth(),但是需要在使用前先调用measure(0,0)方法让其绘制,如果不调用此方法,获取到的结果和getWidth()一样。
总结:
view.measure(0,0)
view.getMeasuredWidth()
可以获取view的宽,不会有任何问题。