为了账号安全,请及时绑定邮箱和手机立即绑定

为什么FlowLayout的 onMeasure方法会执行4次,onLayout方法会执行两次呢,

问老师一个问题,为什么FlowLayout的 onMeasure方法会执行4次,onLayout方法会执行两次呢,下面是log截图

http://img1.sycdn.imooc.com//56a598410001a08209030238.jpg

正在回答

2 回答

上面我回答的不够详细,
这个控件中,父视图使用unspecified dimensions来将它的每个子视图都测量一次来算出它们到底需要多大尺寸,而这些子视图没被限制的尺寸的和太大或太小,所以会用精确数值再次调用measure()(也就是说,如果子视图不满意它们获得的区域大小,那么父视图将会干涉并设置第二次测量规则)。其中measure()方法会调用onMeasure()方法。
代码中,由于把每行剩余空间重新分配,会调用了requestLayout()方法,这个方法又会导致measure()和onLayout()方法的再次调用。
最后你会发现 onMeasure()方法调用了 1次*2*2=4次  onLayout()方法调用了 1次*2 =2次

下图是View的生命周期.

http://img1.sycdn.imooc.com//5850b96600017b2d06920611.jpg

0 回复 有任何疑惑可以回复我~

如果父视图的子视图的个数为0,就会执行一次。否则就会执行多次。因为开始时父试图中是没有子试图的。但是当你从xml文件中加载子试图或者在java代码中添加子试图时,父试图的状态会发生变化,这个变化会引起onlayout甚至是onmeasure。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
打造Android中的流式布局和热门标签
  • 参与学习       30489    人
  • 解答问题       56    个

酷炫的热门标签到底是怎么实现的呢,本教程会给你答案

进入课程

为什么FlowLayout的 onMeasure方法会执行4次,onLayout方法会执行两次呢,

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信