Android-View--总结,总有几个你用得到,自定义View必备知识

本文总结了Android自定义View的重点,包括不同模式下尺寸的确定,事件传递分发机制,以及如何解决View的事件冲突。详细探讨了match_parent、wrap_content在不同父布局模式下的行为,以及自定义View时需要考虑的wrap_content支持、padding处理、线程管理和滑动冲突解决策略。
摘要由CSDN通过智能技术生成

1.父布局是 EXACTLY 模式:
a).子 view 宽或高是个确定值,那么子 view 的 size 就是这个确定值,mode是 EXACTLY(是不是说子 view 宽高可以超过父 view?见下一个)
b).子 view 宽或高设置为 match_parent,那么子 view 的 size 就是占满父容器剩余空间,模式就是 EXACTLY
c).子 view 宽或高设置为 wrap_content,那么子 view 的 size 就是占满父容器剩余空间,不能超过父容器大小,模式就是 AT_MOST

2.父布局是 AT_MOST 模式:
a).子 view 宽或高是个确定值,那么子 view 的 size 就是这个确定值,mode 是EXACTLY
b).子 view 宽或高设置为 match_parent,那么子 view 的 size 就是占满父容器剩
余空间,不能超过父容器大小,模式就是 AT_MOST
c).子 view 宽或高设置为 wrap_content,那么子 view 的 size 就是占满父容器剩余空间,不能超过父容器大小,模式就是 AT_MOST

3.父布局是 UNSPECIFIED 模式:
a).子 view 宽或高是个确定值,那么子 view 的 size 就是这个确定值,mode 是EXACTLY
b).子 view 宽或高设置为 match_parent,那么子 view 的 size 就是 0,模式就是UNSPECIFIED
c).子 view 宽或高设置为 wrap_content,那么子 view 的 size 就是 0,模式就是UNSPECIFIED

获取到宽高的 MeasureSpec 后,传入 view 的 measure 方法中来确定 view 的宽高,这个时候还要分情况
1.当 MeasureSpec 的 mode 是 UNSPECIFIED,此时 view 的宽或者高要看 view 有没有设置背景,如果没有设置背景,就返回设置的 minWidthminHeight,这两个值如果没有设置默认就是 0,如果 view 设置了背景,就取 minWidthminHeight和背景这个 drawable 固有宽或者高中的最大值返回

2.当 MeasureSpec 的 mode 是 AT_MOST 和 EXACTLY,此时 view 的宽高都返回从MeasureSpec</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值