控件架构

控件树

Android中的控件可以分为View控件和ViewGroup控件两类,一个ViewGroup控件可以包含多个View控件,这样就形式了一棵控件树:

控件树

控件树中的上层父控件负责下层子控件的测量和绘制,并且传递交互事件给子控件。

每个子控件都包含一个指向父控件的ViewParent对象,ViewParent对象专门负责管理与父控件的交互事件,从而对整个视图进行控制。

Activity中的findViewById()方法就是在控件树中,以DFS来查找对应的控件的。

界面架构

每个Activity都包含一个Window对象,具体由PhoneWindow实现,PhoneWindow将DecorView设置为Window的顶层View。

DecorView将屏幕分为:StatusBar、DecorContent、NavigationBar三部分,DecorContent又包含ActionBar和ContentView两部分。

界面架构

Activity就是通过setContentView()方法将布局内容加载到ContentView中的。

从界面架构图可以看出,ActionBar和ContentView都是在DecorView中进行绘制的,如果使用requestWindowFeature()方法设置全屏显示,那么需要在setContentView()方法调用之前进行。

视图树

通过AS的Layout Inspector工具,可以直观的看到一棵标准的视图树:

视图树

视图树中的结构和上面描述的界面架构基本上能够对应上,只是多了一个action_mode_bar_stub,这个ViewStub对象主要用于绘制ActionMode状态下的ActionBar区域。

坚持原创技术分享,您的支持将鼓励我继续创作!