1

例如当我们编写代码时

View view = inflater.inflate(R.layout.main_activity, null);

安卓系统是做什么的?

4

2 回答 2

4

查看源代码LayoutInflater。它是一个抽象类,其具体实例是通过getLayoutInflater().

本质上,inflater 创建一个根视图对象(被膨胀的 XML 的根视图组),然后通过 XML 树进行两次传递以附加每个子视图。这是递归完成的,以处理“包含”并修复子视图之间的引用,例如 in RelativeLayout,并且从上到下完成。

第一遍通过实例化每个子视图来构造树,自上而下递归,并将 XML 属性传递给视图构造函数,告诉视图它应该有多大。然后,它measure()使用度量规范对象调用由父级确定的限制(例如,具有 2 个子视图的相对布局,每个子视图都请求 match_parent)并询问视图它想要多大的限制。如果视图本身是一个视图组,它将使用相同的算法来测量它的子视图。

第二个传递是布局传递,当layout()每个子级调用以将其自身定位在视图中时。父级使用在测量过程中计算的测量值定位视图。 onDraw()被调用并传递一个从DecorView支持位图创建的画布。

完成的树然后准备传递给由setContentView()或完成的窗口管理器addContentView()

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/view/LayoutInflater.java#LayoutInflater

于 2012-12-24T17:42:35.247 回答
0

用简单的语言扩展 XML 布局意味着您正在转换XMLin View. 然后,您可以使用父视图/膨胀视图获取在 XML 中声明的每个视图。

例如 -

View view = inflater.inflate(R.layout.main_activity, null);

现在,这里view是 XML 的引用,您可以从中获取所有视图:

TextView tv = (TextView)view.findViewById(R.id.tv);
于 2012-12-24T16:48:56.803 回答