View体系架构

97 阅读3分钟

Android的View体系架构是构建用户界面的基础,它定义了如何在屏幕上展示和交互各种UI元素:

一、View的基本概念

  1. 定义:View是Android中所有UI组件的基类,用于构建用户界面。无论是按钮、文本框、图像等可见元素,还是用于组织其他View的容器,都继承自View类。
  2. 作用:View的主要作用是展示数据和接收用户的输入。它可以显示文本、图片、动画等内容,并响应用户的点击、滑动、手势等操作。

二、View的位置参数和属性

  1. 位置参数: View的位置主要由四个顶点决定,分别是左上角纵坐标(top)、左上角横坐标(left)、右下角横坐标(right)和右下角纵坐标(bottom)。 这些参数都是相对于View的父容器来说的。
  2. 其他属性
    • Width和Height:表示View的宽度和高度,可以使用具体的像素值或特定的布局参数(如wrap_content、match_parent)。
    • Background:设置View的背景,可以是颜色、图片或其他可绘制对象。
    • Padding:设置View内容与边界之间的空白区域。
    • Margin:设置View与其他View之间的空白区域。

三、View的层次结构和视图树

  1. 层次结构: 每个Activity或Fragment都有一个根View,称为根布局。 这个根布局可以包含其他View,而这些View又可以包含其他View,形成一个层次结构,即视图树。
  2. 视图树的构建: 用代码或XML布局文件来定义这棵视图树。XML布局文件比较直观。

四、View的绘制流程

  1. 测量阶段(OnMeasure): 系统通过调用View的measure()方法来测量View的大小,确定view自己的宽度和高度,并为其子View提供测量规格。

    原理: MeasureSpec(SpecMode + SpecSize),高2位包括EXACTLY(view大小直接由SpecSize决定)、AT_MOST(view ≤ SpecSize,由内容/背景大小决定)、UNSPECIFIED(不限制)。 单个view:调用measure触发onMeasure,传入MeasureSpec信息,调用setMeasureDimension设置自己宽高。 viewgroup:根据自身布局参数和子view的布局参数,计算出子view的MeasureSpec,并传给子view进行测量。

  2. 布局阶段(OnLayout): 在确定View的大小后,系统会通过调用view.layout()方法来确定View在父View中的位置。这是一个从顶层父View向子View递归调用的过程。

    原理: 调用layout触发onLayout,设置view四个边界(左上右下),进一步调用子view的onLayout()

  3. 绘制阶段(OnDraw): 在布局完成后,系统会调用View的onDraw()方法来绘制View的内容。 原理:(1)调用drawBackground绘制背景; (2)onDraw(canvas)绘制内容(每个子类都复写,自定义view常在这里绘制图形和文本); (3)如果是viewgroup走dispatchDraw绘制子viewgroup,单一view空实现dispatchDraw。

五、自定义View

通过继承View类并重写相关方法、或者添加新的功能和样式,或者组合多个原生控件,来实现自定义的UI组件。

六、View的事件处理

传送门:juejin.cn/post/740580…

View是用户交互的核心,它负责接收并处理各种输入事件(如点击、触摸、滑动等)。事件处理流程通常涉及到事件的分发、拦截和最终处理。 ViewGroup和View在事件处理中扮演着不同的角色,共同协作以响应用户的输入。

总结来说,Android的View体系架构是一个复杂而强大的系统,它提供了丰富的功能和灵活的扩展性,使得开发人员能够轻松地构建出各种各样的用户界面。