Android 控件架构view和ViewGroup

作者: 把重要的事情做到极致 | 来源:发表于2017-01-24 16:34 被阅读123次

    Android 控件架构

    控件架构,咋一听,很高大上的样子,如果深入去了解其实却是很高大上哈 !! 今天我就简单的写个总结,一方面增强自己的理解。另一方面也可以给不懂的童鞋一个参考哈!若有分析的不对,欢迎指正和拍砖~

    控件和控件树是什么鬼

    • 控件组成
      既然是控件架构,那么必然先要了解控件对吧。Android 的控件大致被分为两大类,即View 和ViewGroup; 扯淡吧 android控件多了去了button、Image、TextView、RelativeLayout...这些都是基于View和ViewGroup系统给我们封装好的一些控件和容器控件。我们自己也可以基于它们实现自己的控件或容器控件。

    • 控件树
      android 的界面是由view和ViewGrop构成的就像下图:

      imageimage
      ViewGroup作为父控件可以包含View和ViewGrop,ViewGroup,通过ViewGrop整个界面形成了一个树形结构,这就是我们所说的控件树,上层控件负责下层控件的绘制与测量,并传递交互事件。
      imageimage

    架构又是什么鬼

    这里的架构指的是UI界面架构。简单的讲:Activity本身是没有界面的,它只提供一个窗口,开发人员通过Activity提供的接口setContentView(View)将UI放到Activity所创建的窗口上,这个过程中各个角色组成UI界面架构。

    UI界面架构图UI界面架构图

    每个Activity都包含一个Window对象,window对象通常由PhoneWindow实现,PhonWindow将DecorView作为整个应用窗口的根View,DevorView将具体要显示的内容呈现在phoneWindow上,在显示上它将屏幕分为了两部分 TitleView 和 ContentView. TitleView就是 actionBar部分,ContentView它是一个ID为content的Framelayout,activity_main.xml就被设置在这样一个Framelayout里面。

    细说DecorView

    再来仔细探讨下DecorView结构


    标准视图树标准视图树

    DecorView的第二层封装一个LinearLayout作为ViewGroup,这一层的布局结构会根据用户设置的参数进行布局,默认的情况是上面TitleBar 下面是ContentView 。但是我们也可以选择全屏模式通过设置requestWindowFeature(Window.FEATURE_NO_TITLEBA)来隐藏titlebar。

    当调用SetcontentView()方法后,ActivityManagerService就会调用Onresume()方法将整个DecorView添加到PhoneWindow中去,并让其显示出来,从而完成最终的界面绘制。

    本文参考群英传而总结,有不对地方欢迎指正。。

    相关文章

      网友评论

        本文标题: Android 控件架构view和ViewGroup

        本文链接:https://www.haomeiwen.com/subject/pzwzbttx.html