Android自定义
一、自定义如何分类?
1、自定义View
在没有现成的View,需要自己实现的时候,就使用自定义View,一般继承自View,SurfaceView或其他的View。
2、自定义ViewGroup
自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件,大多继承自ViewGroup或各种Layout。
注意:自定义View属于控件,自定义ViewGroup属于组件
二、自定义View流程图
1、onDraw() 方法为您提供了一个 Canvas,您可以在其上实现所需的任何东西:2D 图形、其他标准或自定义组件、样式文本或您可以想到的其他任何东西。
2、onMeasure() 是组件与其容器之间的渲染约定的关键部分。应该替换 onMeasure(),以高效且准确地报告其所含部分的测量结果。由于父级的限制要求(传入 onMeasure() 方法),以及一旦计算出宽度和高度就要使用测量的宽度和高度调用 setMeasuredDimension() 方法的要求,这变得稍微有些复杂。如果未通过已替换的 onMeasure() 方法调用此方法,则结果会在测量时出现异常。
简要来说,实现 onMeasure() 的方式如下所示:
- 调用已替换的 onMeasure() 方法时,应指定宽度和高度测量规范(widthMeasureSpec 和 heightMeasureSpec 参数都是表示尺寸的整数代码),应将这些规范视为应该生成的宽度和高度的限制要求。如需对这些规范可能要求的限制的完整参考,请参阅 View.onMeasure(int, int) 下的参考文档(此参考文档也清楚地说明了整个测量操作)。
- 组件的 onMeasure() 方法应计算渲染组件所需的测量宽度和高度。此方法应尽量符合传入的规范,尽管可以选择超出这些规范(在这种情况下,父级可以根据不同的测量规范选择执行哪些操作,例如裁剪、滚动、抛出异常或要求 onMeasure() 重试)。
- 计算宽度和高度后,必须使用计算得出的测量值调用 setMeasuredDimension(int width, int height) 方法。如果不执行此操作,则会导致系统抛出异常。
三、流式布局
FlowLayout,流式布局,这个概念在移动端或者前端开发中很常见,特别是在多标签的展示中,往往起到关键作用。然而Android官方,并没有为开发者提供这样一个布局,图例: