Activity中的setContentView方法到底做了什么?
来源:互联网 发布:linux for qq2016安装 编辑:程序博客网 时间:2024/06/06 01:45
Activity中的setContentView方法到底做了什么?
我们从setContentView开始了解View的加载过程Actvity中的onCreate方法中的setContentView到底做了些什么?(PS:以下代码是基于Android 25)
我们看下Activity的setContentView源码,发现最终有掉用Window的setContentView方法(其实是Window的子类PhoneWindow的setContentView方法)。
继续查看PhoneWindow 类中的setContentView
mContentParent 是一个ViewGroup,如果mContentParent为null,则执行installDecor方法。
mDecor是DecorView(继承自FrameLayout)。generateDecor中会创建并返回DecorView。
generateLayout方法中会通过getWindowStyle方法返回Window的TypedArray(包括Window_windowFullscreen、Window_windowTranslucentStatus、Window_windowContentTransitions等等)同时非常关键的是在该方法中掉用DecorView的onResourcesLoaded方法(该方法会把layoutResource对应的布局文件返回的View添加到DecorView中)
最后generateLayout方法中通过findViewById(ID_ANDROID_CONTENT)返回一个ViewGroup。
PS:requestFeature为什么要在setContentView之前调用?
可以看到requestFeature方法有对mFeatures、mLocalFeatures进行赋值,Activity掉用setContentView方法最终会掉用PhoneWindow的generateLayout方法同时通过getLocalFeatures方法返回mLocalFeatures,通过mLocalFeatures值加载不同的系统布局文件(layoutResource),传给mDecor.onResourcesLoaded(mLayoutInflater,layoutResource)。
- Activity中的setContentView方法到底做了什么?
- setContentView到底做了什么
- Android的Activity中setContentView到底经历了什么?
- SetContentView都做了什么
- activity 中的 setContentView( )方法
- sqlsession中的opensession到底做了什么
- SqlSession中的OpenSession到底做了什么?
- (源码阅读)我们经常用的setContentView(),到底做了什么。
- Activity setContentView(int layoutResID) 发生了什么
- setContentView() 究竟都做了什么?
- c语言中的volatile到底做了什么?
- DUPLICATE到底做了什么?
- 到底做了些什么
- 你到底做了什么
- AFNetworking到底做了什么?
- AFNetworking到底做了什么?
- AFNetworking到底做了什么
- AFNetworking到底做了什么?
- hadoop面试常见问题及相关总结
- 动手实操 | 如何用 Python 实现人脸识别,证明这个杨幂是那个杨幂?
- 基于Netty和Zookeeper实现RPC框架
- Android Matrix使用总结
- iOS 设定UIButton 按钮圆角:纯代码方法 和 storyboard中设定
- Activity中的setContentView方法到底做了什么?
- 不依赖数组 论述
- 如何更新vmware tools
- redis hello world 及设置
- mt9v034相机ros驱动包
- B. Five-In-a-Row
- EventBus --事件总线原理解析
- 为什么MaxCompute采用列式存储?列式存储和行式存储的主要区别在哪
- redis-3.0 主从复制