1、setContentView的作用是将View加载到根view之上,这样当显示view时,先显示根view,然后在显示子view,以此类推,最终将所有view显示出来。...2、setContentView必须要放在findviewbyid之前,因为view在加载之前是无法引用的。...3、setContentView最本质的作用是为要显示的view分配内存。...4、activity、window和view之间的关系: 而当我们运行程序的时候,有一个setContentView()方法,Activity其实不是显示视图(直观上感觉是它),实际上Activity...在activity中: public void setContentView(int layoutResID) { getWindow().setContentView
是setContentView所设置的View的父容器。...的具体流程源码 先从Activity.java的setContentView()开始 public void setContentView(@LayoutRes int layoutResID)...{ getWindow().setContentView(layoutResID); initWindowDecorActionBar(); } 可以看到如下步骤...: 获取window(PhoneWindow) 调用PhoneWindow的setContentView方法。...到此setContentView的流程大致已经结束。以上是decorView已经创建起来。注意此时的DecorVIew还是不可见的。
1 从我们自己新建的一个Activity的setContentView 就开始 public class ActivityTest extends AppCompatActivity{ @Override...int layoutResID) { this.getDelegate().setContentView(layoutResID); }...Step2 具体分析已在上面代码中注释 step3 this.mWindow.setContentView(subDecor) 接着我们就来看看3 this.mWindow.setContentView...(subDecor);同样是this.mWindow我们就到PhoneWindow中找setContentView方法 @Override public void setContentView(...再来看最开始的setContentView public void setContentView(int resId) { this.ensureSubDecor(); ✍ 我们上面这么久的调用就是走完这一行代码
文章目录 MainActivity 继承Activity的setContentView流程 1) MainActivity 继承至 Activity 1.1) Activity#setContentView...PhoneWindow // 这里调用的是 PhoneWindow的setContentView getWindow().setContentView(layoutResID);...initWindowDecorActionBar(); } 1.1.1) PhoneWindow#setContentView @Override public void setContentView...调用的是AppCompatDelegateImpl实现类中的 setContentView @Override public void setContentView(@LayoutRes int layoutResID...#setContentView @Override public void setContentView(int resId) { // 确保ActionBar的特有UI结构构建完毕
源码分析: 说到Activity的setContentView,咱们直接找到一个Activity中的setContentView点进去看看!...public void setContentView(View view) { getWindow().setContentView(view); initActionBar...(); } 点进来之后我们发现它里边调用了getWindow.setContentView,我们点击getWindow看看里面是什么!...上面,我们在点击了重填按钮后,我们的setContentView使用的是老大,即setContentView(int id),回想刚才我们分析的源码,老大是通过反射拿到我们的view,而每次反射拿到的view...都不是同一个view,也就是说我们在onCreate中setContentView(R.layout.activity_main)和在点击了重填后setContentView(R.layout.activity_main
setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID);...initWindowDecorActionBar(); } public void setContentView(View view) { getWindow().setContentView...//这也就是为什么我们在代码中设置Theme或者requesetFeature()的时候必须在setContentView之前的原因....在setContentView中,PhoneWindow的setContentView方法中的下面两种方式都把这个FrameLayout作为了main_activity.xml的根视图: 1. mLayoutInflater.inflate...(在onCreate中调用了setContentView,所以把除了decorView之外的所有的view都已经添加进去了。)
setContentView 添加的 View 加载完成的回调方法? setContentView 的执行流程?...的 setContentView 问题解答 参考文章 ---- 先上一个流程图: ---- 继承自 Activity 的 setContentView 我们直接看看 Activity 的三个 setContentView...().setContentView(layoutResID); initWindowDecorActionBar(); } public void setContentView(View view...) { getWindow().setContentView(view); initWindowDecorActionBar(); } public void setContentView...接下来我们直接看 PhoneWindow 的 setContentView 的方法. ---- PhoneWindow 的 setContentView 我们先来看看 setContentView(int
(R.layout.activity_main); } } 进入setContentView方法,Activity中: /** * Set the activity content from...(android.view.View) * @see #setContentView(android.view.View, android.view.ViewGroup.LayoutParams) */...public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID)...到了这里,我们就知道了,要看PhoneWindow中的setContentView @Override public void setContentView(int layoutResID) {...,实际调用的是PhoneWindow的setContentView(PhoneWindow是抽象类Window的实现) 2、PhoneWindow的setContentView中,会去创建DecorView
(R.layout.activity_main); } setContentView()方法会将我们的视图设置到哪儿去了?...public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID);...initWindowDecorActionBar(); } Activity会调用当前Activity的Window的setContentView()方法,而Window类是一个抽象类,唯一实现类...public void setContentView(int layoutResID) { if (mContentParent == null) { installDecor...然后再将我们setContentView里的View加载到mContentParent上面去。
分析一下 android 中布局的加载流程,每次新建 activity 时都要在 onCreate 中调用 setContentView(R.layout.activity_main);调用这个方法具体做了哪些事情呢...分析onCreate中的setContentView: // mainActivity中 public void onCreate(Bundle savedInstanceState) {...super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);...} 跳转setContentView()方法, 需要关注的地方有两个: 1、 installDecor(); 用来初始化DecorView 2、 mLayoutInflater.inflate(layoutResID...等会解释) // PhoneWindow.java 中 public void setContentView(int layoutResID) { // 刚初始化 mContentParent
Android开发的同学们对setContentView肯定都不陌生,但凡写到Activity,都离不开这个函数,今天我们就来看看它内部的实现吧! 备注:本文基于Android 8.1.0版本。...2、setContentView AppCompatActivity中的setContentView也非常简洁,可以看出来需要去代理类中继续查看代码。...@Override public void setContentView(@LayoutRes int layoutResID) { getDelegate().setContentView...再回到setContentView @Override public void setContentView(int resId) { ensureSubDecor();...5、总结 setContentView的过程就是通过PhoneWindow创建DecorView,然后创建SubDecor,最终将传递进来的布局add进来。
我们在Activity创建的时候,都用调用setContentView()函数来设置界面,下面我们通过源码来分析setContentView()的流程。...* * @see #setContentView(android.view.View) * @see #setContentView(android.view.View,...(this, window); 我们得到了他的实现类PhoneWindow,然后在PhoneWindow找到setContentView函数: @Override public void setContentView...在这基础上我们看AppCompatActivity的setContentView函数: @Override public void setContentView(@LayoutRes int...setContentView()源码流程就分析到这里,细看请自行查看源码。
本系列主要是探讨View的绘制过程及部分相关的实现机制的源码分析 setContentView分析 相关关系 Activity中有Window成员 实例化为PhoneWindow PhoneWindow...分析 Window类的setContentView方法 而Window的setContentView方法是抽象的 所以查看PhoneWindow的setContentView() setContentView...private ViewGroup mContentParent; @Override public void setContentView(int layoutResID) {...(View view) { setContentView(view, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)); }...说明在Activity的布局改动时 (setContentView或者addContentView 方法执行完毕后会调用改方法) 所以各种View的findViewById方法什么的可以放在这里 setContentView
setContentView(View view) { getWindow().setContentView(view); initActionBar(); } public void...setContentView(View view, ViewGroup.LayoutParams params) { getWindow().setContentView(view, params...); initActionBar(); } Activity一共重载了三个setContentView方法,其中第一个setContentView(int layoutResID)方法是我们常用的...public void setContentView(int layoutResID) { //getWindow()获取activity内部对象mWindow并调用它的setContentView...Window getWindow() { return mWindow; } Activity的setContentView方法实际还是调用mWindow的setContentView方法,接下看我们试看看
setContentView(R.layout.main) 在android代码里经常能看见 , R.layout.main是个布局文件即控件,设置如何摆放如何显示的,setContentView就是设置一个...其实setContentView是个多态方法, 我们可以先用LayoutInflater把布局xml文件引入成View对象,再通过setContentView(View view)方法来切换视图。...1.常用的构造函数: 1)setContentView(int layoutResID) 2)setContentView(View view) 3)setContentView(View...setContentView(view)显示出来。...一般在activity中通过setContentView()将界面显示出来,但是如果要在非activity中如何对控件布局进行设置操作,就需LayoutInflater动态加载。
不管怎么说,当我们在Activity中调用setContentView的时候,其实内部调用了PhoneWindow的setContentView。...PhoneWindow的setContentView方法 探索PhoneWindow 既然实质是用了PhoneWindow的setContentView,那么我们就来看看这里的setContentView...总结 所以整个setContentView内部做了如下事: 在Activity中调用setContentView(实际调用PhoneWindow#setContentView) 新建DecorView实例...setContentView方法: @Override public void setContentView(View view) { setContentView(view, new ViewGroup.LayoutParams...这里总结下到目前为止,AppCompatActivity在setContentView的时候做了啥: 以前到这里到流程是: 调用setContentView(实际调用PhoneWindow的setContentView
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41894125,本文出自:【张鸿洋的博客】 大家在平时的开发中,对于setContentView...Activity的setContentView public void setContentView(int layoutResID) { getWindow().setContentView...当然了这里不是我们的关键,因为我们的setContentView里面只是回调了onContentChanged,而onContentChanged在Activity中是空实现。...至于features,除了theme中设置的,我们也可以在Activity的onCreate的setContentView之前进行requestFeature,也解释了,为什么需要在setContentView...再贴一次PhoneWindow的setContentView @Override public void setContentView(int layoutResID) {
引言 普通的一个 Activity-setContentView(),你知道它内部做了什么吗?...概要 源码分析 我们先来看一下Activity-setContentView方法: public void setContentView(@LayoutRes int layoutResID) {...getWindow().setContentView(layoutResID); initWindowDecorActionBar(); } 简简单单滴方法,内部调用了 getWindows.setContentView...我们接着去看 PhoneWindows 的 setContentView() @Override public void setContentView(int layoutResID) { if...串一遍思路 我们接下来将上面的分析整体走一遍: 当我们调用Activity的 setContentView 时,内部其实是执行了 PhoneWindows(windows的唯一实例)的 setContenView
注意:AppCompatActivity.setContentView()与Activity.setContentView()主要的区别,Activity.setContentView直接将视图添加到Window...目录 1.setContentView()调用流程 1)在AppCompatActivity定义了setContentView 2)getDelegate() 3)ensureSubDecor();...void setContentView(@LayoutRes int layoutResID) { getDelegate().setContentView(layoutResID);...} @Override public void setContentView(View view) { getDelegate().setContentView...{ getDelegate().setContentView(view, params); } 实现了三个重载的setContentView方法,getDelegate()方法负责创建
可以看到代码流程很简单,从Activity.java的setContentView方法进入,到PhonewWindow.java的setContentView方法进行一系 列处理,接下来进入代码进行分析...1,Activity.java的setContentView方法,代码路径\android\frameworks\base\core\java\android\app public void setContentView...做了两件事儿 一是getWindow获取到Window对象,然后去调用Window的setContentView方法。...首先一个问题,为什么我要说getWindow.setContentView调用的是PhoneWindow中的setContentView方法??...前面,这是因为在调用setContentView时会获取到window的各种 feature进行一些判断设置。
领取专属 10元无门槛券
手把手带您无忧上云