1、setContentView的作用是将View加载到根view之上,这样当显示view时,先显示根view,然后在显示子view,以此类推,最终将所有view显示出来。

2、setContentView必须要放在findviewbyid之前,因为view在加载之前是无法引用的。
3、setContentView最本质的作用是为要显示的view分配内存。
4、activity、window和view之间的关系:

而当我们运行程序的时候,有一个setContentView()方法,Activity其实不是显示视图(直观上感觉是它),实际上Activity调用了PhoneWindow的setContentView()方法,然后加载视图,将视图放到这个Window上,而Activity其实构造的时候初始化的是Window(PhoneWindow),Activity其实是个控制单元,即可视的人机交互界面。

打个比喻:

Activity是一个工人,它来控制Window;Window是一面显示屏,用来显示信息;View就是要显示在显示屏上的信息,这些View都是层层重叠在一起(通过infalte()和addView())放到Window显示屏上的。而LayoutInfalter就是用来生成View的一个工具,XML布局文件就是用来生成View的原料

activity调用setContentView其实是调用window的方法
在activity中:
public void setContentView(int layoutResID) {
        getWindow().setContentView(layoutResID);
        initActionBar();
    }
在PhoneWindow类中:
@Override
    public void setContentView(int layoutResID) {
        if (mContentParent == null) {
            installDecor();
        } else {
            mContentParent.removeAllViews();
        }
        mLayoutInflater.inflate(layoutResID, mContentParent);
        final Callback cb = getCallback();
        if (cb != null && !isDestroyed()) {
            cb.onContentChanged();
        }
    }
从上面代码可以看出,最终的根View就是 mContentParent,而mContentParent就是installDecor()生成的DecorView。

5、如何在一个activity中显示不同布局?
1)使用LayoutInflater inflate两个view:v1,v2
2)使用setContentView(View view)方法设置这两个view
具体讲解在http://blog.csdn.net/yanzi1225627/article/details/7802402

setContentView剖析相关推荐

  1. 历史文件备份,原文件已损失

    zzf073的博客 - 第6页 - DevDiv开发者社区 - Powered by DEVDIV.COM! zzf073的博客 - 第4页 - DevDiv开发者社区 - Powered by DE ...

  2. [Android] Toast问题深度剖析(二)

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者: QQ音乐技术团队 题记 Toast 作为 Android 系统中最常用的类之一,由于其方便的api设计和简洁的交互体验,被我们所广泛采用 ...

  3. Activity启动过程剖析

    Activity启动过程剖析 你同样可以在Github上看到这篇文章:https://github.com/onlynight/ActivityStartPrinciple 写在前面 在看这篇文章之前 ...

  4. Android实例剖析笔记(二)

    上篇文章分析了NotesList这个Activity,并着重剖析了其中的intent机制,本文将继续上篇未完的工作,以NotesList为实例介绍Android的菜单机制(尤其是动态菜单机制). 简介 ...

  5. Android之事件处理全面剖析

    转载:http://blog.csdn.net/jxxfzgy/article/details/43926987 Android 事件处理机制说难也不难,说简单也不简单,为什么这么说呢?因为我相信大部 ...

  6. 基本功 | Litho的使用及原理剖析

    1. 什么是Litho? Litho是Facebook推出的一套高效构建Android UI的声明式框架,主要目的是提升RecyclerView复杂列表的滑动性能和降低内存占用.下面是Litho官网的 ...

  7. Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!...

    Android实训案例(四)--关于Game,2048方块的设计,逻辑,实现,编写.加上色彩.分数等深度剖析开发过程! 关于2048,我看到非常多大神,比方医生.郭神.所以我也研究了一段时间.还好是研 ...

  8. Android中65536问题剖析

    问题出现的原因是因为导入融云通信的包后,突然提示: Error:The number of method references in a .dex file cannot exceed 64K.  L ...

  9. React Native 启动流程 源码剖析

    开始之前   开始分析之前,新建一个名为 RnDemo 的空项目,RN 版本选择 0.58.1,查看项目自动为我们生成 MainActivity.java 和 MainApplication.java ...

最新文章

  1. 快讯 | 清华成立AI研究院,与谷歌深度合作,张钹、姚期智、Jeff Dean坐镇
  2. ArcGIS使用Python脚本工具
  3. 以高效节能为使命 绿色数据中心势在必行
  4. CUDA Libraries简介
  5. 最短路径问题(Floyd算法)
  6. xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance(xsi:schemaLocation详解)
  7. 配置ubuntu使用console登录登录欢迎提示
  8. 为了让盲人也能追剧,优酷做了哪些努力?
  9. QT每日一练day27:绘制不规则窗体
  10. 先科机顶盒一直出现android,网络电视机顶盒停留在开机界面,无法开机的解决办法...
  11. Raspberry Pi (树莓派)折腾记之一
  12. js 浏览器下载显示进度
  13. 计算机无法进去系统,开机进入bios无法进入系统怎么办_电脑开机就进入bios的解决方法...
  14. 感知算法-超声波三角定位测量方法
  15. 从循环神经网络到卷积神经网络
  16. python 将PDF 转成 图片的几种方法
  17. 超级计算机有关文献,超级计算机系统性能平衡性预先评价方法研究
  18. 猫和老鼠服务器维护多久结束,《猫和老鼠》母猫玩家遇到4个杰瑞,5分钟后,她想挂机了!...
  19. Dubboamp;hsfamp;Spring-cloud的区别
  20. 激光制导炸弹导引头半实物仿真系统ETest方案设计

热门文章

  1. Failed to execute 'toDataURL' on 'HTMLCanvasElement,在canvas.toDataURL()执行时候报错解决方案...
  2. 浪潮服务器销售量,35.6%市占率,浪潮服务器成为中国服务器市场“销量王”
  3. 无锡职业培训——在无锡如何考教师证面试
  4. L3MON搭建(基于云端的远程安卓管理套件)
  5. Windows11安装kohya_ss详细步骤(报错、踩坑)
  6. [分析与设计]二手房房屋图片功能需求分析与设计
  7. 外部系统接口稽核经验谈
  8. 排序在实际生活中的应用
  9. 把物联网带到生活中---凯利讯半导体
  10. 天将降大任于斯人,必先灭其QQ……后必过CPA也!