首页 存档 技术 查看内容

教你读源码之探究Android界面的显示机制(我可能看到了假的视图等级)

2018-3-30 13:00 |来自: 互联网 263 0

摘要: http://www.jianshu.com/p/b854f4532544 本文主要目的: 探究Android界面显示机制,在Android视图等级方面提出了个人见解,以及发现WindowsManager的真正用图是对Windows上的DecorView进行管理,而不是对Window进行 ...

http://www.jianshu.com/p/b854f4532544

本文主要目的:

探究Android界面显示机制,在Android视图等级方面提出了个人见解,以及发现WindowsManager的真正用图是对Windows上的DecorView进行管理,而不是对Window进行管理。解释了requestWindowFeature(Window.FEATURE_NO_TITLE)用来设置全屏显示一定要放在setContentView()方法前面才会生效。还有自定义view的onMeasure、onLayout和onDraw方法的调用时机。


如果想展示一个界面,Android工程师的一般工作流程是,根据产品的原型图,设计布局文件,然后在Activity中的setContentView中加载布局文件,初始化各种view,编译运行,打开这个Activity的时候,就可以查看到布局文件的视图。
所以问题就来了,Android系统是怎样把我们自定义的布局文件显示出来的?

多数程序员认为的Android的视图等级


多数程序员认为的Android的视图等级


这个图应该很常见,基本上所有的资料在介绍视图等级的时候都会拿出上图来进行介绍介绍DecorView是**view,巴拉巴拉。。。

不过关于视图等级用这幅图进行表示,我一点都不认同,可以这么说,这样划分是错误的(仅仅是个人见解,有讨论的欢迎一起讨论)

为什么这么说呢?

View的中文意思是视图,既然要讲视图等级,而且DecorView又是**视图,所以我认为Window(窗口)和Activity(活动)都可以去掉,变成这样。


Android的真正视图等级



讲到这里,可能会有些人激动了,WTF!讲的啥玩意!Window呢?Window可是窗口啊!WindowsManager可是对窗口进行管理啊(其实我对WindowsManager是对窗口进行管理这句我也不认同,后续会说)

从简单的布局文件开始入手

为了不至于枯燥,先从一个小例子说起:
老板:当点击这个App的时候,要在界面上显示我的照片!五分钟后交工!
码农:好的,遵旨。
然后码农熟练的打开了IDE,
定义了BossActivity.java
自定义布局文件 activity_boss_layout.xml

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部