当前位置: > 华清远见教育科技集团 > 嵌入式学习 > 讲师博文 > AndroidUI机制分析
AndroidUI机制分析
时间:2016-12-13作者:华清远见

在开发Android应用界面的时候,我们首先会创建一个布局文件,如layout.xml,然后在代码当中使用setContentView()方法将刚才创建layout布局文件导入到Activity中,这样,在运行程序的时候我们就会在模拟器或手机上看到这个布局,其实,在Android中,我们创建的这个布局并不是直接加载到AndroidUI的,而是在之前历经了几个过程,具体过程如下:

  • PhoneWindow
  • DecorView
  • System Layout
  • Content Parent
  • Activity Layout

1.PhoneWindow

Android中的基本的窗口系统,每个Activity 均会创建一个PhoneWindow对象,是Activity和整个View系统交互的接口。

2.DecorView

DecorView是当前Activity所有View的父类,它并不会向用户呈现任何东西,主要功能如下:

  • 接收ViewRoot分发来的事件,如key、touch、trackball等;
  • 作为PhoneWindow与ViewRoot之间的桥梁,ViewRoot通过DecorView设置窗口属性;
  • DecorView有一个直接的子View,我们称之为System Layout,这个View是从系统的Layout.xml中解析出的,它包含当前UI的风格,如是否带title、是否带process bar等。

3.SystemLayout

  • PhoneWindow通过解析预置的layout.xml来获得不同的layout,我们称之为System Layout,我们将这个System Layout添加到DecorView中,Android提供了8种System Layout;
  • 预设风格可以通过PhoneWindow方法requestWindowFeature()来设置,需要注意的是这个方法需要在setContentView()方法调用之前调用。

4.ContentParent

Content Parent的子类是ContentView,它其实对应的是System Layout中的id为"content"的一个FrameLayout。这个FrameLayout对象包括的才是我们的Activity layout(每个System Layout都会有这么一个id为"content"的一个FrameLayout)。

5.Activity Layout

设置窗口的ContentView,用来和userUI进行交互,其上的几层并不能响应并完成user输入所期望达到的目的。

下面举个例子来验证以上所述内容:

首先,我们需要新建一个工程,然后使用模拟器运行。

然后,我们打开SDK文件下的hierarchyviewer工具,查看当前界面的图层结构,如下图:

根据上面的分析,我们不难看出,当我们加载一个程序的界面时,首先执行的是PhoneWindow,接着是DecorView,后面的LinearLayout即为SystemLayout,它包含了一个标题,标题的布局为上面的FrameLayout和TextView,下面的FrameLayout为ContentView,注意它的id为content,用于加载开发者定义的界面,后面的RelativeLayout和TextView就是我们定义的布局文件。

发表评论
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)