android机制分析,AndroidUI机制分析

本文详细介绍了Android应用界面的构建过程,从PhoneWindow、DecorView到SystemLayout和ContentView,再到ActivityLayout的加载,揭示了UI从创建到显示的各个步骤,并通过HierarchyViewer工具验证了这一过程。同时,讲解了如何通过requestWindowFeature()方法设置预设的窗口风格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发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()方法调用之前调用。

a4973abb1cb1393f342f0809f15b0608.png

4.ContentParent

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

5.Activity Layout

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

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

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

b916e83eead55d4651afa5d3d4683548.png

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

6dec451bbbd4a1256044466b7d2dc341.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值