谈谈activity中setContentView()内部的实现。
来源:互联网 发布:xnview mp mac 编辑:程序博客网 时间:2024/06/06 01:24
在安卓的开发中,每当我们新建一个activity,其中一个必不可少的步骤就是setContentView()。那么安卓系统是怎么把布局文件加载进来的呢,这里简单的分析下源码。这里我继承的是AppCompatActivity,它的setContentView()方法如下:
@Overridepublic void setContentView(@LayoutRes int layoutResID) { getDelegate().setContentView(layoutResID);}
它调用的是delegate的setContentView()方法。进一步跟进去会发现,最终调用的是AppCompatDelegate中的setContent()。
@Overridepublic void setContentView(int resId) { ensureSubDecor(); ViewGroup contentParent = (ViewGroup) mSubDecor.findViewById(android.R.id.content); contentParent.removeAllViews(); LayoutInflater.from(mContext).inflate(resId, contentParent); mOriginalWindowCallback.onContentChanged();}
从这段代码中可以看到,这里首先得到mSubDecor(activity创建的时候生成的根布局)中content,然后通过layoutInflate把id转成View对象,添加到content中。这里继续跟进看看LayoutInflate中的inflate()方法:
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot) { final Resources res = getContext().getResources(); if (DEBUG) { Log.d(TAG, "INFLATING from resource: \"" + res.getResourceName(resource) + "\" (" + Integer.toHexString(resource) + ")"); } final XmlResourceParser parser = res.getLayout(resource);
可以看到inflate是调用了XmlResourceParser来解析xml文件。总的来说,程序在加载时会给每个资源文件创建一个索引。setContentView的时候,安卓会使用xml解析器解析对应的xml布局文件,得到一个VIewGroup对象,再放到activity的根布局中。
1 0
- 谈谈activity中setContentView()内部的实现。
- 切换Activity中布局的setContentView( )方法
- Activity 中 setContentView 的深入思考
- 浅谈Activity中setContentView()
- Activity的setContentView解析
- Android setContentView 实现同一个activity下不同view的切换
- ndroid setContentView 实现同一个activity下不同view的切换
- Android setContentView 实现同一个activity下不同view的切换
- Android setContentView 实现同一个activity下不同view的切换
- android 的activity中addContentView 和 setContentView 的区别
- android 的activity中addContentView 和 setContentView 的区别
- Android的Activity中setContentView到底经历了什么?
- Activity 的 setContentView draw时机
- Activity中的Window的setContentView
- Activity的setContentView源码分析
- 学习android Activity的setContentView
- 从setContentView谈谈android的布局层级
- Activity中setContentView方法调用过程
- java设计模式-装饰者模式
- hdu5816Hearthstone(状压DP)
- 05全栈工程师--2016-08-10
- Foundation框架中的NSString 不可变字符串
- Cookie利用神器:CookieHacker
- 谈谈activity中setContentView()内部的实现。
- Java7并发编程--3.1、信号量Semaphore机制
- 《代码整洁之道》第一章 总结
- Windows下的内存管理简单了解
- 数据库、用户、方案、表空间、表对象
- 最新 9个免费建站空间 网站均免备案
- CodeForces 589J -- J. Cleaner Robot (BFS)
- 当你对着一个应用程序双击后发生了什么
- 如何理解奇偶校验只能发现数据代码中奇数位出错的情况