[Android]我对View的认识

前言

我觉得 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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章