再看LayoutInflater,这次可能会有新的认识
2022-04-29 本文已影响0人
在岁月中远行
我们平常通过xml编写的布局是如何转换成android中的一个View对象从而显示在应用程序中的呢?这就是LayoutInflater.
![](https://img.haomeiwen.com/i4471798/d1036d967ab6b20f.png)
setContentView底层原理也是通过LayoutInflater。
它将xml布局转换成一个View对象分为两步:
1 通过解析器将xml文件中的内容解析出来。
2 使用反射将解析出来的元素创建成View对象。
![](https://img.haomeiwen.com/i4471798/e1b0984be63db653.png)
接下来看使用反射创建View对象的代码片段。
![](https://img.haomeiwen.com/i4471798/b619724102302d8a.png)
利用反射构造函数器newInstance创建对象
![](https://img.haomeiwen.com/i4471798/c6ff43ca51ff990d.png)
使用的几种方式:
![](https://img.haomeiwen.com/i4471798/5cbda6c70e2f9a79.png)
1 第一种不指定root布局传为空 然后调用addView方法
这种时候buttonLayout所有的layout开头的属性都失效,改变宽高没作用。
2 第二种 指定父布局 第三个参数传false 这种后面调用addView方法正常使用。
3 第三种 指定父布局 第三个参数传true 这种后面不需要调用addView方法。否则会报错。