為什么FlowLayout的 onMeasure方法會(huì)執(zhí)行4次,onLayout方法會(huì)執(zhí)行兩次呢,
問老師一個(gè)問題,為什么FlowLayout的?onMeasure方法會(huì)執(zhí)行4次,onLayout方法會(huì)執(zhí)行兩次呢,下面是log截圖
問老師一個(gè)問題,為什么FlowLayout的?onMeasure方法會(huì)執(zhí)行4次,onLayout方法會(huì)執(zhí)行兩次呢,下面是log截圖
2016-01-25
舉報(bào)
2016-12-14
上面我回答的不夠詳細(xì),
這個(gè)控件中,父視圖使用unspecified dimensions來將它的每個(gè)子視圖都測(cè)量一次來算出它們到底需要多大尺寸,而這些子視圖沒被限制的尺寸的和太大或太小,所以會(huì)用精確數(shù)值再次調(diào)用measure()(也就是說,如果子視圖不滿意它們獲得的區(qū)域大小,那么父視圖將會(huì)干涉并設(shè)置第二次測(cè)量規(guī)則)。其中measure()方法會(huì)調(diào)用onMeasure()方法。
代碼中,由于把每行剩余空間重新分配,會(huì)調(diào)用了requestLayout()方法,這個(gè)方法又會(huì)導(dǎo)致measure()和onLayout()方法的再次調(diào)用。
最后你會(huì)發(fā)現(xiàn) onMeasure()方法調(diào)用了 1次*2*2=4次 ?onLayout()方法調(diào)用了 1次*2 =2次
下圖是View的生命周期.
2016-12-14
如果父視圖的子視圖的個(gè)數(shù)為0,就會(huì)執(zhí)行一次。否則就會(huì)執(zhí)行多次。因?yàn)殚_始時(shí)父試圖中是沒有子試圖的。但是當(dāng)你從xml文件中加載子試圖或者在java代碼中添加子試圖時(shí),父試圖的狀態(tài)會(huì)發(fā)生變化,這個(gè)變化會(huì)引起onlayout甚至是onmeasure。