android View 之Android控件架构

1、 Android控件架构

Android控件的层次是由android.view.   View(视图类)类呈现出最基本的UI架构;一个视图

占据一个屏幕的矩形区域,并负责事件绘画与事件的处理。View是Widgest的基类,常用来创建与用户交互的图像界面(GUI)。视图有众多的拓展者,包括文本视图(TextView),图像视图(ImageView),进度条(ProgressBar),视图组件(ViewGroup)等。如下图:


ViewGroup控件作为父控件可以包含多个View控件,并管理其包含的View控件。通过ViewGroup,整个界面形成了一个树形结构,上层控件负责下层控件的测量与绘画,并传递交互事件。通常一个Activity中使用findViewBuyId()方法,就是控件树已树的深度优先遍历查找对应的元素。在每棵树的顶部都有一个ViewParent对象,这就是这个树的控制核心,所有交互管理事件都是由它来统一调度和分配。

每个activity都包含一个window 对象,在android中window对象通常由PhoneWindow来实现。PhoneWindow将一个DecorView设置为整个应用的窗口的根View,即为整个PhoneWindow最顶层的View;DecorView将要显示的具体内容呈现在PhoneWindow上,这里的所有的View的监听事件,都通过WindowManagerService来进行接收,并通过Activity的对象来回调响应的OnClickLisener。在显示上,它将屏幕分成两个部分,一个是TitleView,一个是ContentView;

DecorView根据Mainifest的Theme或者在PhoneWind中设置的Flag来确定Layout,来作为根视图。在Activity中,当创建后,系统会调用attach方法,将其添加到ActivityThread当中,在Attach方法中创建了一个Window对象,要注意的是,window对象创建时,并没有创建Décor对象, 当在程序在onCreate()中调用了setContentView()方法时,会检测DecorView是否存在,如果不存在则创建DecorView,并将  View添加到DecorView中。同时在调用setContentView()方法后ActivityMangerService会回调onResume()方法,此时系统会把整个的DecorView添加到PhoneWindow中,并显示出来,从而完成最终界面的绘制。


一般DecorView下的只有一个子元素LinerLayout,当然DecorView的子元素layout是根据theme来的,LinerLaout中包含通知栏,标题栏、内容栏等;LinerLayout里面包含一个内容的FrameLatout  ,比如内容的FrameLatout 可以通过

FrameLatout  myFragment=( FrameLatout )findBuyId(android.R.id.content)获取得到



猜你喜欢

转载自blog.csdn.net/x605940745/article/details/50396252