一、概念
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的窗口的可见性发生改变时调用。 |