setContentView剖解

setContentView剖解setContentView剖析1、setContentView的作用是将View加载到根view之上,这样当显示view时,先显示根view,然后在显示子view,以此类推,最终将所有view显示出来。2、setContentView必须要放在findviewbyid之前,因为view在加载之前是无法引用的。3、setContentView最本质的作用是为要显示的

大家好,又见面了,我是你们的朋友全栈君。setContentView剖析

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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153270.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle 11g新特性虚拟列分区

    Oracle 11g新特性虚拟列分区

    2022年1月28日
    37
  • 字符串正则匹配leetcode_动态规划的特点

    字符串正则匹配leetcode_动态规划的特点原题链接给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = “aa” p = “a”输出:false解释:”a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa” p = “a*”输出:true解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是

    2022年8月9日
    7
  • singleTop和singleTask有什么区别

    singleTop和singleTask有什么区别文章来源:http://blog.csdn.net/leon8/article/details/6844397singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。(注意是栈顶,不在栈顶照样创建新实例!)singleTask模式:当intent到来,需要创建singleTask模式

    2022年6月26日
    42
  • C#中虚方法(virtual)详解

    C#中虚方法(virtual)详解虚方法如何定义?虚方法怎么声明?虚方法的规则是什么?虚方法如何进行调用?虚方法的作用是什么?虚方法有什么好处?虚方法使用时注意什么?

    2025年9月1日
    7
  • java小型图书馆管理系统

    java小型图书馆管理系统根据需求,建立了一个BookMgr类,该类为实现小型图书馆的各个需求。为了和用户有一个良好的交互,根据需求且满足要求中的隐藏条件,先命名了交互的菜单函数printMenu1(),代码如下:publicvoidprintMenu1(){          System.out.println(“欢迎使用图书馆管理系统”);          Syst

    2022年7月8日
    23
  • 区块链入门——比特币科普

    区块链入门——比特币科普

    2022年3月12日
    84

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号