您的位置:首页 > 移动开发 > Android开发

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布局文件解析流程浅析(下)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: