Android Kotlin自定义ViewGroup三

第三种自定义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 = parentWidthSize
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值