ViewGroup
には maxWidth
/ maxHeight
は存在しません。素直に onMeasure
を override
して実現しましょう。
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.AT_MOST) {
return super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}
measure(
MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.AT_MOST),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
)
setMeasuredDimension(measuredWidth, measuredHeight)
}
onMeasure
時に MeasureSpec.AT_MOST
で最大値を指定して計算し、計算結果を setMeasuredDimension
で設定することで、最大値以上にならないようにしています。