1.从SetContentView讲起

1.1Activty的setContentView里面的内容

    public void setContentView(@LayoutRes int layoutResID) {getWindow().setContentView(layoutResID);initWindowDecorActionBar();}

首先这个getWindow是什么?

mWindow, 作用:

mWindow = new PhoneWindow(this);

在attach@ativity 方法里面定义的。默认就是PhoneWindow.也就是Activity里面包含的window实例。

@Overridepublic void setContentView(int layoutResID) {// Note: FEATURE_CONTENT_TRANSITIONS may be set in the process of installing the window// decor, when theme attributes and the like are crystalized. Do not check the feature// before this happens.if (mContentParent == null) {installDecor();} else if (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) {mContentParent.removeAllViews();}if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {final Scene newScene = Scene.getSceneForLayout(mContentParent, layoutResID,getContext());transitionTo(newScene);} else {mLayoutInflater.inflate(layoutResID, mContentParent);}mContentParent.requestApplyInsets();final Callback cb = getCallback();if (cb != null && !isDestroyed()) {cb.onContentChanged();}}

setContentView

mContentParent 是什么,可以看定义:

// This is the view in which the window contents are placed. It is either// mDecor itself, or a child of mDecor where the contents go.

按注释的意识就是mContentParent 就是我们加入layout的父布局,它有2种可能,DecorView 或者它的子View。

1.2 installDecor

installDecor就2块 ,第一,new Decor,如果需要的话。

第二创建mContentParent。

mContentParent= generateLayout(mDecor);

我们来看看generateLayout。

有一堆的判断,但是最终 加入Decor的过程,其实就2句。

View in = mLayoutInflater.inflate(layoutResource, null);
decor.addView(in, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));

第一句就是把layout id 变换成View。第二句就是把View加入到Decor中。

1.3 把Decor加入到Activity中。

Activity中的view,是通过Window 然后跟WMS来管理的。

一个Activity中对象持有mWindow对象。

mWindow ->WindowManager->WindowManagerImpl->WMS->ViewRoot->add View.

转载于:https://www.cnblogs.com/deman/p/5877924.html

Gui系统之View体系(2)---View的setContent相关推荐

  1. 图解Android - Android GUI 系统 (2) - 窗口管理 (View, Canvas, Window Manager)

    Android 的窗口管理系统 (View, Canvas, WindowManager) 在图解Android - Zygote 和 System Server 启动分析一 文里,我们已经知道And ...

  2. Android View体系‘铁三角‘

    前言 在搞Android开发的时候,和View的交互是必不可免的,因为我们肉眼可见,可以控制操作最直观的也是View,因此很有必要来吹水一下整个View体系的'铁三角',既View 绘制流程,View ...

  3. Android View体系(五)从源码解析View的事件分发机制

    Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源码解析Sc ...

  4. Android进阶之光读书笔记——第三章:View体系与自定义View

    第三章 View体系与自定义View 本章将介绍Android中十分重要的View,在多本书中View是必讲的一节,Android群英传就讲了不少的View的知识,那么在这里我们再去复习一遍吧 3.1 ...

  5. View的事件体系(上)(View基础知识,滑动,弹性滑动)

    View不是四大组件之一,但重要性堪比四大组件,本篇博文主要讲解View的事件体系,包括View的基础知识,滑动,弹性滑动,事件分发机制,滑动冲突的种类与解决方案. 一 View的基础知识 (1).V ...

  6. 乱七八糟的分析View体系

    问你个问题 甲:Activity.getWindowManager() 乙:Activity.getSystemService(Context.WINDOW_SERVICE) 丙:Context.ge ...

  7. Android View体系(一)视图坐标系

    http://blog.csdn.net/itachi85/article/details/50708391 前言 Android View体系是界面编程的核心,他的重要性不亚于Android四大组件 ...

  8. Android View体系(十)自定义组合控件

    相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...

  9. 《Android进阶之光》--View体系与自定义View

    No1: View的滑动 1)layout()方法的 public class CustomView extends View{private int lastX;private int lastY; ...

  10. 【iOS-Cocos2d游戏开发之七】添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题!...

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/455.html ...

最新文章

  1. 把三千行代码重构为15行
  2. JQuery中$.ajax()分享
  3. leetcode算法题--验证二叉树的前序序列化
  4. C#后台导入css和设置前台关键字和描述
  5. 06复杂查询(多数据库表)
  6. Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题)...
  7. Java实例_综合实践5.简单工厂模式
  8. C语言九十四之请编写函数fun(char *str, int n),其功能是:使字符串str的前导*号不能多余n个,若多于n个,则删除多余的*号,若少于或等于n个,则不做处理。
  9. 如何优雅的绘制一棵省市区三级可选择的树?
  10. 1400协议是什么和28181区别_1400张拆解案例,够你PPT拆解学习好几遍了!
  11. VS2010可反复安装MSDN的方法
  12. Facebook热门应用被曝向第三方提供用户信息
  13. Google开发者大会:你不得不知的Tensorflow小技巧
  14. hypermesh10的安装
  15. Oracle的FIXED
  16. Kylin使用Spark构建Cube
  17. 什么是360度绩效评估反馈?
  18. Nginx之正则表达式、location匹配简介以及rewrite重写
  19. Python札记 -- 参数魔法
  20. VS2015 解决 “有太多的错误导致IntelliSense引擎无法正常工作,其中有些错误无法在编辑其中查看”问题

热门文章

  1. Spring学习笔记--spring+mybatis集成
  2. oracle 11g EM停止后无法启动
  3. java.lang.NoSuchMethodError: android.os.Bundle.getString
  4. 使用Qt作窗口截屏(含源码)
  5. 蘋果iPhone 3G S更出色
  6. activity 变成后台进程后被杀死_Android后台杀死系列之二:ActivityManagerService与App现场恢复机制...
  7. 稳健+成长股池(转载)
  8. 如何新增或修改ns2的核心模組--queue management
  9. pytorch图像和张量的相互转换_如何加载图像并将其转换为PyTorch的适当张量?
  10. List集合与List的子类