首先本文参考android群英传书籍,Android开发艺术探索。
- android控件中大致可以分为两类:一个是ViewGroup,一个是View控件。ViewGroup作为父控件,里面可以包含多个View控件,并且管理这些包含的View控件。通过ViewGroup,整个界面上的控件形成了一个树形的控件树,父控件对子控件有绝对的掌控权,每个子控件的占地面积和位置,都是基于父控件来分配的,上层控件控制下层控件的测量和绘制,并且传递交互事件。通常在Activity中使用的findViewById()方法,就是在控件树上以树的的深度优先遍历来查找对应的控件元素。在每一个树的顶部,都有一个ViewParent对象这是控件树的核心,所有的交互管理事件都是由他来进行统一的调度的,从而可以对整个师徒进行整体的控制。如下的控件树:
每一个Activity中都包含一个Window对象,在Android中window对象通常是由PhoneWindow来实现的。PhoneWindow将一个DecorView设置为整个应用窗口的根View。DecorView作为窗口界面的顶层视图,封装了一些窗口操作的基本方法。将要显示的具体内容呈现在PhoneWindow上,我们的View的监听事件都是由WindowMangerService来进行接收,并且通过Activity的对象来回调相应的onClickListener.在显示上。它将屏幕分成两部分:一个是titleView,另外一个就是ContentView。
最常用的布局--上面显示TitleBar下面是content这样得的
而用户设置requestWindowFeature(Window.FEATURE_NO_TITLE)来设置全屏显示,也就是视图树中只有content的内容。所以我们的requestWindowFeature(Window.FEATURE_NO_TITLE一定要在setContentView()方法之前去调用才能生效。
而在代码中,当程序oncreat()方法中调用setContentView()方法后,ActivityManagerService会调用onResume()方法,此时呢系统才会把整个Decorview添加到PhoneWindow中,并让其显示出来,从而最终完成界面的绘制。