Android ViewGroup的理解与封装
来源:互联网 发布:汽车行业数据查询 编辑:程序博客网 时间:2024/05/17 04:04
通常情况下,有以下三种方法来实现自定义的控件。
对现有控件进行拓展通过组合来实现新的控件从写View来实现全新的控件
自定义须知:
- view是否支持wrap_content (有的自定义控件不打算支持就完全不需要对应的onMeasure方法)
- 如果有必要让你的View支持Padding ViewGroup:考虑自身的Padding和子元素的margin 我觉得尽量继承 LinearLayout毕竟里面的margin 直接用就OK了 而且xml能alt出来 view :考虑自身的Padding就OK了
- View中如果有线程或者动画,需要及时停止,在上图红色的部分完成初始和关闭
- View 带有滑动嵌套情形的时候,需要处理好滑动冲突
在View中通常有一些比较重要的回调方法:
onFinishInflate():从XML加载组件后的回调
onSizeChanged ()[在onMeasure之,onLayout之前 而且不一定执行]:组件大小改变时回调
onMeasure():回调该方法进行测量
onLayout():回调该方法来确定显示的位置
onTouchEvent():监听触摸事件的回调
MeasureSpec的理解
重写之前先了解MeasureSpec的specMode,一共三种类型:
EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
AT_MOST(咱们特殊处理这个):表示子布局限制在一个最大值内,一般为WARP_CONTENT
UNSPECIFIED:表示子布局想要多大就多大,很少使用(一般都系统用 咱们不考虑)
此类设计的有些巧妙 为了减少内存 通过加密和解密的方式把 两个内容封装到了一个参数里
注意:因为参数是int 所以即使没有加密的int也是可以有mode 和size的
getMode 解密成 mode
getSize 解密成Size
ViewGroup的两个方法 来布局
onMeasure: 通过测量孩子的大小 来真正测量自己需要多大 如果不考虑 wrap_content 则可以不写此方法,直接在布局里写逻辑!!!
通过setMeasuredDimension(int width,int height) 会为view传递测量的宽高
onLayout:知道自己多大后 然后给孩子布局
需要兼容的属性:visibility,padding,margin
visibility: 当由非Gone变成Gone或者 Gone变非 Gone 会走viewgroup的onMeasure,onLayout
padding:仅仅考虑自身的Padding即可
EXACTLY:这种则会移动 内容在 控件中的位置
wrap_content:这种情况会撑大 控件 即内容到控件周围的空隙
margin:需要考虑所有子view的magrin(此margin必须符合 此ViewGroup的Margin)
此为padding和margin的区别
padding:是自定义控件自己去支持的
margin:则不需要考虑自己的 因为这是父控件支持的
对ViewGroup的封装 支持padding (流式布局与九宫格都通过此完成 减少了很多代码)
https://github.com/luhaoaimama1/ZoneStudio/blob/master/customView/src/main/java/com/zone/view/base/ViewGroup_Zone.java
- Android ViewGroup的理解与封装
- ViewGroup的dispatchTouchEvent理解
- Android—View与ViewGroup的区别
- ViewGroup的测量与绘制(Android群英传)
- Android之View与viewGroup的区别
- Android事件传递机制以及ViewGroup的onInterceptTouchEvent的理解
- 深入理解Android中ViewGroup
- 深入理解Android中ViewGroup
- 深入理解Android中ViewGroup
- 深入理解Android中ViewGroup
- android ViewGroup中的LayoutParams的理解和说明
- 对Android view/viewgroup事件分发的理解
- View和ViewGroup的理解
- android里的ViewGroup
- android 的核心 ViewGroup
- epoll模型的理解封装与应用
- epoll模型的理解封装与应用
- epoll模型的理解封装与应用
- jquery控制按钮的禁用与启用
- 如何写一篇策划书
- 【黑马程序员】C语言基础-分支结构(选择结构)
- linux后台运行和关闭、查看后台任务
- Spring事务配置
- Android ViewGroup的理解与封装
- 请求的操作无法在使用用户映射区域打开的文件上执行。
- jQuery Ajax 实例 ($.ajax、$.post、$.get)
- struts2的工作原理
- 跨linux 服务器,远程ip文件共享 SSHFS
- [参考文档] 灾备中心(机房)运维外包管理办法
- 《深入理解java虚拟机》学习笔记之虚拟机字节码执行引擎
- python 开发中易混淆点
- phpExcel常用方法详解大全