前言
我觉得 Android UI 的一个很重要的东西就是 View,关于 View 我了解的并不多,所以我的打开了 Android 中 View 的源码瞧了瞧,2万多行的代码,瞬间傻眼!!对于我们初学者来讲学习View的目的无非就是学会使用各种 UI 控件以及自定义 View。
自定义View
自定义 View 在我看来就是画图。当然 Android 系统已经定义了 View,所以通常都是重写一些系统框架在所有的 View 上调用的基本方法。一下是自定义 View 的基本流程。
- 自定义 View 的属性
- 在 View 的构造方法中获得我们自定义的属性
- 重写 onMesure
- 重写 onDraw
View 中的方法
下面对 View 中的一些方法进行分类描述
创建
构造方法: View 中有两种类型的构造方法,一种是在代码中构建View,另一种是填充布局文件构建 View,第二种构造方法要解析并应用布局文件中定义的任何属性。
onFinishInflate(): 在来自于 XML 的 View 和它所有的子节点填充之后被调用。
布局
onMeasure: 调用该方法来确定 view 及它所有子节点需要的尺寸onLayout 当 view 需要为它的所有子节点指定大小和布局时,此方法被调用
onSizeChanged: 当这个 view 的大小发生变化时,此方法被调用
绘制
onDraw: 当 view 渲染它的内容时被调用
事件处理
onKeyDown 当一个新的按键事件发生时被调用
onKeyUp 当一个按键按起时被调用
onTrackballEvent 当轨迹球动作事件发生时被调用
onTouchEvent 当触屏动作发生时被调用焦点
焦点
onFocusChanged: 当 view 获得或是失去焦点时被调用
onWindowFocusChanged: 当包含 view 的窗口获得焦点或是失去焦点时被调用
ID
关于 View 的 ID,只是用于标记 View。
位置
View 的几何形状是一个矩形,view 的位置由矩形的左上角的 x,y 座标及矩形的高度和宽度决定,他们的单位都是像素。
通过 getLeft 和 getTop 方法可以获得 view 相对于它的直接父节点的x,y座标。
此外,还有一些便利的方法可以帮助我们减少计算量,比如 getRight 和getBottom 方法,调用 getRight 等价于 getLeft()+getWidth() 方法,
同理 getBottom 等价于 getTop()+getHeight() 方法。
大小
一个 View 的大小由它的宽度和高度来表达,一个View实际上拥有两对宽高值。
第一对宽高值是:测量过的宽度和高度,即 view 想从它的父节点获得的宽高值,可以通过 getMeasuredWidth() 方法和 getMeasuredHeight() 方法获得。
第二对宽高值是:绘制的宽度和高度,即View的实际宽度和高度,是在布局之后,绘制 View 阶段的宽高值,这与上面提到的宽高值可能不同。通过getWidth() 方法和 getHeight() 方法可以获得 View 的实际宽度和高度。
padding
padding 同 css 中的 padding 属性。通过 setPadding(int,int,int,int) 可以设置 View 的 padding,通过 getPaddingXXX() 方法可以获得 View 中对应方向的 padding,XXX指得是 left,right,top,bottom。