昨天在项目中使用到游标动画,需要测量游标和父容器的宽度,于是在OnGlobalLayoutListener中getWidth,但是打印的结果始终为0。因为这个方法是在布局加载完成后进行调用的,按理来说是可以获取到控件宽度的。


后面想到项目的布局MainActivity中FrameLayout里包含了三个Fragment,也就是底部导航栏的三个部分。在MainActivity中我做了判断,显示默认的Fragment,将其他Fragment隐藏。所以,我在Fragment的OnCreateView写下OnGlobalLayoutListener中的内容,实际上执行的时候,这个Fragment已经隐藏掉了,自然获取不到Width。


解决方法:

在该Fragment中重写OnHiddenChanged方法,判断Hidden,当Fragment显示在前台的时候执行getWidth的那段代码,就可以成功拿到数据了。


这个问题也搞了蛮久,在此记录一下。


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐