Android 当xml“膨胀”时,幕后会发生什么?

Android 当xml“膨胀”时,幕后会发生什么?,android,android-inflate,Android,Android Inflate,例如,当我们编写代码时 视图=充气机.充气机.layout.main_活动,空 安卓系统做什么?用简单语言扩展XML布局意味着您正在转换视图中的XML。然后,您可以使用父/子视图获取XML中声明的每个视图 例如- View view = inflater.inflate(R.layout.main_activity, null); 现在,这里的视图是XML的引用,您可以从中获取所有视图,如下所示: TextView tv = (TextView)view.findViewById(R.id.t

例如,当我们编写代码时

视图=充气机.充气机.layout.main_活动,空


安卓系统做什么?

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

例如-

View view = inflater.inflate(R.layout.main_activity, null);
现在,这里的视图是XML的引用,您可以从中获取所有视图,如下所示:

TextView tv = (TextView)view.findViewById(R.id.tv);

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

例如-

View view = inflater.inflate(R.layout.main_activity, null);
现在,这里的视图是XML的引用,您可以从中获取所有视图,如下所示:

TextView tv = (TextView)view.findViewById(R.id.tv);

查看LayoutInflater的源代码。它是一个抽象类,其具体实例是通过GetLayoutFlater获得的

本质上,充气器创建一个根视图对象,即充气XML的根视图组,然后在XML树中执行两次传递以附加每个子视图。这是递归完成的,以处理“include”和修复子视图之间的引用,例如在RelativeLayout中,并且是自上而下完成的

第一步通过自上而下递归地实例化每个子视图来构造树,并将XML属性传递给视图构造函数,告诉视图它应该有多大。然后,它为每个传递由父级确定的限制的子级调用度量值,例如RelativeLayout和2个子视图,每个子视图使用度量值规范对象请求匹配父级,并询问视图希望有多大。如果视图本身是一个视图组,它将使用相同的算法来度量它的子视图

第二个过程是对每个子级调用布局以在视图中定位自身时的布局过程。父对象使用在测量过程中计算的测量来定位视图。调用onDraw,并向其传递从DecorView背景位图创建的画布

然后,完成的树准备好传递给窗口管理器,该操作由setContentView或addContentView完成


查看LayoutInflater的源代码。它是一个抽象类,其具体实例是通过GetLayoutFlater获得的

本质上,充气器创建一个根视图对象,即充气XML的根视图组,然后在XML树中执行两次传递以附加每个子视图。这是递归完成的,以处理“include”和修复子视图之间的引用,例如在RelativeLayout中,并且是自上而下完成的

第一步通过自上而下递归地实例化每个子视图来构造树,并将XML属性传递给视图构造函数,告诉视图它应该有多大。然后,它为每个传递由父级确定的限制的子级调用度量值,例如RelativeLayout和2个子视图,每个子视图使用度量值规范对象请求匹配父级,并询问视图希望有多大。如果视图本身是一个视图组,它将使用相同的算法来度量它的子视图

第二个过程是对每个子级调用布局以在视图中定位自身时的布局过程。父对象使用在测量过程中计算的测量来定位视图。调用onDraw,并向其传递从DecorView背景位图创建的画布

然后,完成的树准备好传递给窗口管理器,该操作由setContentView或addContentView完成


一个小小的评论行可以帮助我理解反对票。你是在问AOSP中的什么地方发生了这种情况,还是这个过程是如何工作的?如果流程是如何运作的,具体是什么?如何测量布局?视图对象是如何实例化的?还有其他问题吗?主要的问题是如何做到这一点,第二个问题是任何代码引用或链接都将有助于理解过程。很难说出你在问什么。在问题中,你问这个词的意思。在对答案的评论中,你说你知道它的意思,并希望知道它是如何完成的。此外,基本上每个Android教程(包括官方和非官方教程)都展示了如何在最基本的意义上扩展xml文件。@Geobits教程告诉您如何用xml定义布局,并在代码中使用findViewById。但很多事情必须在幕后进行。这就是问题所在?一条小小的评论线将有助于我了解反对票。你是在问AOSP中的什么地方发生了这种情况,还是这个过程是如何工作的?如果流程是如何运作的,具体是什么?如何测量布局?视图对象是如何实例化的?还有其他问题吗?主要的问题是如何做到这一点,第二个问题是任何代码引用或链接都将有助于理解过程。很难说出你在问什么。在问题中,你问这个词的意思。在对答案的评论中,你说
你知道这意味着什么,并希望知道它是如何完成的。此外,基本上每个Android教程(包括官方和非官方教程)都展示了如何在最基本的意义上扩展xml文件。@Geobits教程告诉您如何用xml定义布局,并在代码中使用findViewById。但很多事情必须在幕后进行。这就是问题所在?问题是那个充气机是干什么的。充气机是干什么的?嗯,这就是我试图解释的。它提供了一个视图,它是XML的引用。问题是这个充气器是做什么的。Simon,我的理解是LayoutInflater仅从XML文件创建视图对象,并将子视图添加到父视图。测量、布局和绘制通道不由布局工程师负责。Simon,我的理解是LayoutInflater只从xml文件创建视图对象,并将子视图添加到父视图中。测量、布局和绘制通道不由布局工程师负责。如果我错了,你能纠正我吗?