一、问题
如图所未布局:ImageView显示不出来。
image.png
二、线索
1、CustomViewGroup的onlayout中计算的参数,left,top,right,bottom大小正确。
2、FrameLayout中onLayout中left,top,right,bottom大小正确,onMeasure大小不正确,是CusotmViewGroup的宽高。由此分析可能原因是FrameLayout中onMeasure没有正确执行。
3、查看FrameLayout中onMeasure源码可以知道,onMeasure的计算和子view的宽高模式有关。
三、解决办法
1、把ImageView的布局属性换成wapcontent。值得注意的是通过代码创建ImgeView时,默认的LayoutParam是matchcontent的。
2、在FrameLayout的onMeasure时用FrameLayout的宽高再次measureChildern一次。
总结:自定义ViewGroup和自定义View的onLayout和onMeasure容易弄混,但主要也就是一个测量和排放的问题,特别要注意ViewGroup中OnMeasure时对SepctMode的处理。
网友评论