之前看郭霖文章讲LayoutInflater 的时候,有讲到在加载的layout中最外层布局设置绝对宽高是无效的。我们在Activity中setContenView()的时候,其实质也是利用的LayoutIflater 加载的Activity布局。而这时设置的绝对宽高是有效的。是因为在setContentView()的时候,系统会默认在外面包一层FrameLayout。郭霖还用log把当前Activity布局的父布局打印了出来。
当时看到这个心里面就很疑问,为什么要在外面默认加一层父布局呢?后来看到Android群英传,才知道,原来根本不是什么默认加了一层父布局,而是和Activity界面的架构有关。下面就先说下Activity的视图架构。
先上图:
就是这张图,Activity的UI架构图(图是网上找的)。从图中可以清楚的看出,Activity的UI结构。其实每个Activity中都包含一个Window对象,通常,Android中的Window是由PhoneWindow实现的。而PhoneWindow又将一个DecorView设置为整个窗口的根View(

本文介绍了Android Activity的视图架构,包括Window、PhoneWindow、DecorView及其内部结构。重点讲解了为何在设置布局前需要使用requestWindowFeature去除标题,以及视图加载的顺序和结构,帮助理解Activity界面的构建过程。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



