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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • django 聚合函数_聚合函数和非聚合函数

    django 聚合函数_聚合函数和非聚合函数前言orm模型中的聚合函数跟MySQL中的聚合函数作用是一致的,也有像Sum、Avg、Count、Max、Min,接下来我们逐个介绍聚合函数所有的聚合函数都是放在django.db.models

    2022年7月29日
    5
  • Django(74)drf-spectacular自动生成接口文档「建议收藏」

    Django(74)drf-spectacular自动生成接口文档「建议收藏」介绍drf-spectacular是为DjangoRESTFramework生成合理灵活的OpenAPI3.0模式。它可以自动帮我们提取接口中的信息,从而形成接口文档,而且内容十分详细,再也不

    2022年8月7日
    5
  • 飞鸽传书:谈谈RenderControl手动调用「建议收藏」

    飞鸽传书:谈谈RenderControl手动调用「建议收藏」有些网页需要在后台动态创建服务器控件,并且将控件的html代码写入到指定的HtmlTextWriter.如果仅是调用RenderControl方法能够将服务器控件的html内容输出,但它并不会执行OnPreRender,但是通常服务器控件都重写了OnPreRender方法,实现了许多重要的功能.我们不能将其舍弃啊.

    2022年7月21日
    8
  • word怎么把编号变成文本格式_word字离序号特别远

    word怎么把编号变成文本格式_word字离序号特别远记录一下word如何去掉自动编号格式但保留原编号内容的方法:1.调出word的“开发工具”选项打开文件->选项->自定义功能区->选中开发工具->确定,2.编写宏依次点击:开发工具-宏-在“宏名”框内输入宏名(如:NumToTxt)-单击“创建”按钮,弹出VisualBasic编辑器窗口,窗口内自动出现以下内容把下面的这段代码复制下来:ActiveDocument.Content.ListFormat.ConvertNumbersToText粘.

    2025年6月2日
    2
  • 三层架构 银行管理系统

    三层架构 银行管理系统

    2021年10月3日
    39
  • 基于tensorflow的LSTM 时间序列预测模型

    时间序列预测(曲线回归或曲线拟合),结构为训练数据生成-》隐藏输入层-》LSTM神经层-》隐藏输入层-》结果,也可以采用LSTM神经层-》全连接层(多层的普通神经网络)构成,训练效果未对比,与参数调优相关。参数说明:TIME_STEPS:RNN训练的步数,一次训练输入的序列长度;INPUT_SIZE:输入序列中,单个输入的维度,用于曲线拟合或者回归的话,维度即为1;BATCH_SIZE:训练的批…

    2022年4月9日
    43

发表回复

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

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