Android-XML转成View过程简述
2016-03-11 19:35
459 查看
背景
一般我们创建Activity的时候,先是在布局XML中添加好想要的内容。之后,在Activity的java文件中,添加如下代码:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
这样,就完成了将XML布局内容,添加到App中去了。
那么问题来了,Android是怎么实现将XML转换成Activity界面的呢?
分析过程简述:
调用setContentView方法,加载XML内容。在
setContentView方法里面,调用
inflate方法,加载XML中的视图内容。如果遇到GroupView对象,递归加载GroupView中视图的内容。最后,形成View树。
View树创建之后,调用rootView的
performTraversals方法。此方法内部调用
measure(),然后再调用
onMeasure()开始真正的View测量,最后将View树中的所有view的大小尺寸,都计算出来。(注:测量的是View的width和height)
但是,onMeasure()又分为两种情况:
如果是View,列入Button,ImageView等视图,那么
onMeasure()方法就是简单的测量出视图的尺寸
如果是GroupView,例如LinearLayout,RelativeLayout等布局视图。那么
onMeasure()方法会测量除了自身视图以外,还会调用
measureChild()等方法去测量其子视图的尺寸大小。
测量好各个View的尺寸之后。调用
onLayout()方法,遍历所有的子view,确定每一个视图的位置。(注:确定的是位置,即子视图相对于父视图的
左上角,
左下角,
右上角,
右下角的位置)
最后,调用
draw()方法。将view树中的内容,根据
layout()方法中求出的位置,绘制出来。
将XML转换成Activity界面的就此完成了。
源码分析
Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
相关文章推荐
- android热补丁初探之二 热补丁分析对比
- Android-Frame Animation介绍
- android onSaveInstanceState方法
- RecyclerView 的研究和使用
- android中px,dp,sp
- Android开发中遇到的字符串、十六进制和Byte转换,及十六进制校验等函数集
- android错误之MediaPlayer用法的Media Player called in state *,androidmediaplayer
- Android模拟器上网
- android PhoneGap跨平台笔记1--helloword
- Android 中常见的小知识总结
- Android之自定义属性
- Android Support Design Library - CoordinatorLayout
- android中的文件(图片)上传
- android开发50个小技巧
- android开发之应用Crash自动抓取Log_自动保存崩溃日志到本地
- android CoordinatorLayout使用
- 升级Android ADT 和SDK
- Android当中的多线程及AsyncTask
- Android应用如何开机自启动、自启动失败原因
- android的sql表单新增字段- alter table