第三种自定义ViewGroup布局
父容器的大小不确定,子控件的大小不确定
1.获取子控件,由于此时子控件大小不确定,xml配置的可能是At_most 或者Exactly,要考虑设置padding,因此子控件设置测量结果
模仿measureChildWithMargins(),使用下面方法。
//获取子控件
val child = getChildAt(0)
val lp = child.layoutParams
val widthSpec = getChildMeasureSpec(widthMeasureSpec,2*space,lp.width)
val heightSpec = getChildMeasureSpec(heightMeasureSpec,2*space,lp.height)
child.measure(widthSpec,heightSpec)
2.开始确定父容器的尺寸,通过容器本身的mode和size,确定resultWidth 和resultHeight
var resultWidth = 0
var resultHeight= 0
//获取容器本身的尺寸和mode
val parentWidthSize = MeasureSpec.getSize(widthMeasureSpec)
val parentWidthMode = MeasureSpec.getMode(widthMeasureSpec)
//先确定宽度 exactly at_most unspecific
when (parentWidthMode) {
MeasureSpec.EXACTLY -> resultWidth = parentWidthSize
MeasureSpec.AT_MOST -> resultWidth = child.measuredWidth+2*space
else -> resultWidth