美文网首页Android窗口机制Android安卓收藏
Android窗口机制(一)初识Android的窗口结构

Android窗口机制(一)初识Android的窗口结构

作者: Hohohong | 来源:发表于2017-01-13 09:59 被阅读5079次

Android窗口机制系列

Android窗口机制(一)初识Android的窗口结构
Android窗口机制(二)Window,PhoneWindow,DecorView,setContentView源码理解
Android窗口机制(三)Window和WindowManager的创建与Activity
Android窗口机制(四)ViewRootImpl与View和WindowManager
Android窗口机制(五)最终章:WindowManager.LayoutParams和Token以及其他窗口Dialog,Toast

窗口结构

Paste_Image.png

说明

  • 每一个Activity都包含一个Window对象,Window对象通常由PhoneWindow实现
  • PhoneWindow:将Decoriew设置为整个应用窗口的根View。是Window的实现类。它是Android中的最基本的窗口系统,每个Activity 均会创建一个PhoneWindow对象,是Activity和整个View系统交互的接口。
  • DecorView:顶层视图,将要显示的具体内容呈现在PhoneWindow上. DecorView是当前Activity所有View的祖先,它并不会向用户呈现任何东西,它主要有如下几个功能,可能不全:
    • A. Dispatch ViewRoot分发来的key、touch、trackball等外部事件;
    • B. DecorView有一个直接的子View,我们称之为System Layout,这个View是从系统的Layout.xml中解析出的,它包含当前UI的风格,如是否带title、是否带process bar等。可以称这些属性为Window decorations。
    • C. 作为PhoneWindow与ViewRoot之间的桥梁,ViewRoot通过DecorView设置窗口属性。//可以这样获取 View view = getWindow().getDecorView();
    • DecorView只有一个子元素为LinearLayout。代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域。DecorView里面TitleView:标题,可以设置requestWindowFeature(Window.FEATURE_NO_TITLE)取消掉ContentView:是一个id为content的FrameLayout。我们平常在Activity使用的setContentView就是设置在这里,也就是在FrameLayout上

下篇文章将跟大家讲解他们的是如何联系的,以及他们的理解。
Android窗口机制(二)Window,PhoneWindow,DecorView,setContentView源码理解:http://www.jianshu.com/p/e42b638944ae

相关文章

网友评论

  • b10230adda91:说明的第二行decorview 少了一个v。
  • 洛的俠:DecorView里面TitleView:标题,可以设置requestWindowFeature(Window.FEATURE_NO_TITLE)取消掉ContentView:是一个id为content的FrameLayout
    这个怎么理解呢,缺少一个标点符号吧!
    1.process bar 这个是什么?
  • jeepc:“DecorView:顶层视图,将要显示的具体内容呈现在PhoneWindow上.”这句话我觉得有待商榷,Window只是一个抽象的概念,其中定义了一些窗口相关的操作。但是说把内容显示在Window上,这肯定是不对的。
    侯大虎虎:将具体的内容呈现在DecorView,然后DecorView的载体是PhoneWindow,所以也可以间接的说: 将要显示的具体内容呈现在PhoneWindow上
  • 5690dd2f5775:DecorView里面TitleView:标题,可以设置requestWindowFeature(Window.FEATURE_NO_TITLE)取消掉ContentView? 是ContentView?
  • 0f100e7189b2:DecorView只有一个子元素为LinearLayout。代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域。

    有问题把: 只包含标题栏+内容显示栏,而通知栏,也成状态栏(stautsBar),应该不属于DecorView的一部分吧!!!
    但是我也有一个疑问,状态栏(stautsBar)到底属于哪里的呢?
    77364e71608e:DecorView有一个子布局是确定的,但不一定是LinearLayout,这个子布局叫做mContentRoot,mContentRoot的子布局中有一个叫做mContentParent,它用来作为我们在Activity中setContentView传入视图的父布局。
    至于其他的actionbar、标题栏会根据Activity theme的不同,有所变化。
    以上逻辑均在PhoneWindow的generateLayout()方法中。
    还有,状态栏属于系统Window。
    83b4021870e8:@阿木1234 对的,status bar应该不属于decorview
    聪聪的豆芽:图中的titleView就是statusBar
  • 暮雨沉沦:PhotoWindow 写错了吧?应该是PhoneWindow
    Hohohong:打快了,已更改。

本文标题:Android窗口机制(一)初识Android的窗口结构

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