一、概念
View这个类代表用户界面组件的基本构建块。View在屏幕上占据一个矩形区域,并负责绘制和事件处理。View是用于创建交互式用户界面组件(按钮、文本等)的基础类。它的子类ViewGroup是所有布局的父类,它是一个可以包含其他view或者viewGroup并定义它们的布局属性的看不见的容器。
| 构造 | View(Context context) 单参构造:代码中 new 创建实例的时候调用。 |
| View(Context context, AttributeSet attrs) 双参构造:xml中使用时调用(xml转java代码的时候反射),attrs是xml中的属性。 | |
| View(Context context, AttributeSet attrs, int defStyleAttr) 三参构造:使用主题Style的时候调用。 | |
| 绘制过程 | onFinishInflate() 当View和他的所有子控件被XML布局文件填充完成时被调用。(这个方法里面可以完成一些初始化,比如初始化子控件)。 |
| onMeasure() 当测量View和它的子View的尺寸需求时被调用。 | |
| onLayout() 当View给他的子View分配大小和位置的时候调用。 | |
| onSizeChanged() 当view尺寸发生变化时调用。 | |
| 事件处理 | onKeyDown(int keyCode, KeyEvent event) 按下按键时调用,keyCode是按键编号,KeyEvent是按键事件。 |
| onKeyUp(int keyCode, KeyEvent event) 抬起按键时调用。 | |
| onTouchEvent(MotionEvent event) 触摸屏幕时调用,MotionEvent是捕捉到的触摸事件。 | |
| 焦点 | onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) 获取到或者失去焦点时调用。 |
| onWindowFocusChanged(boolean hasWindowFocus) 窗口获取或者失去焦点时调用。 | |
| attach | onAttachedToWindow() 当View被连接到一个窗口时调用。 |
| onDetachedFromWindow() 当View从窗口分离时调用。 | |
| onWindowVisibilityChanged() 当View的窗口的可见性发生改变时调用。 |
二、构造
一共有四个,常用的有下面三个。
| View(Context context) 单参构造:代码中 new 创建实例的时候调用。 |
| View(Context context, AttributeSet attrs) 双参构造:xml中使用时调用(xml转java代码的时候反射),attrs是xml中的属性。 |
| View(Context context, AttributeSet attrs, int defStyleAttr) 三参构造:使用主题Style的时候调用。 |
class MyView : View {//改成this调用2个参数的构造constructor(context: Context?) : this(context, null)//改成this调用3个参数的构造constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, 0)//在3个参数的构造里统一进行处理constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {//TODO...}
}
三、绘制过程
| onFinishInflate() | 当View和他的所有子控件被XML布局文件填充完成时被调用。(这个方法里面可以完成一些初始化,比如初始化子控件)。 |
| onMeasure() | 当测量View和它的子View的尺寸需求时被调用。 |
| onLayout() | 当View给他的子View分配大小和位置的时候调用。 |
| onSizeChanged() | 当view尺寸发生变化时调用。 |
四、事件处理
| onKeyDown() | onKeyDown(int keyCode, KeyEvent event) 按下按键时调用,keyCode是按键编号,KeyEvent是按键事件。 |
| onKeyUp() | onKeyUp(int keyCode, KeyEvent event) 抬起按键时调用。 |
| onTouchEvent() | onTouchEvent(MotionEvent event) 触摸屏幕时调用,MotionEvent是捕捉到的触摸事件。 |
五、焦点
| onFocusChanged() | onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) 获取到或者失去焦点时调用。 |
| onWindowFocusChanged() | onWindowFocusChanged(boolean hasWindowFocus) 窗口获取或者失去焦点时调用。 |
六、attach
| onAttachedToWindow() | 当View被连接到一个窗口时调用。 |
| onDetachedFromWindow() | 当View从窗口分离时调用。 |
| onWindowVisibilityChanged() | 当View的窗口的可见性发生改变时调用。 |