Pich Blog

关注移动开发,大数据,云计算,软件架构!

15.怎么获取View的尺寸

概述

开发过程中经常需要获取一个View的尺寸。但是如果在onCreate,onStart,onResume中基本上是获取不到尺寸的,原因是这时候view还没有测量完成。

onWindowFocusChanged

他表示View已经初始化完毕,尺寸已经准好了。这时候获取就没有问题了,但是这个方法会调用多次,一般来说会加个判断,如果没有获取尺寸才获取。

veiw.post(runnable)

通过post可以将一个runnable投递到消息队列的尾部,然后等待Looper调用次runnable时候,view已经初始化好了。

ViewTreeObserver

使用该回调可以完成这个功能,比如使用OnGlobalLayoutListener这个接口。当view树的状态发生改变或者view树内部的view的可见性发生改变时,会回调onGlobalLayout方法,因为可以在这里获取宽高,伴随着view树的改变,会调用多次。

手动测量

这种模式比较复杂。还得根据LayoutParams来区分:

match_parent

这种情况直接放弃,因为根据view的测量过来需要知道parentSize,即父容器的剩余空间,可以我们在外面拿不到父类的parentSize,所以不能测量。

具体的数值dp/px

如果我们知道具体的尺寸,可以在测量一次,当然如果直接有尺寸,就不需要测量了直接用了。

wrap_content

测量出来不对。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注