Moosphan / Android-Daily-Interview

:pushpin:每工作日更新一道 Android 面试题,小聚成河,大聚成江,共勉之~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2019-10-30:关于LayoutInflater,它是如何通过 inflate 方法获取到具体View的?

Moosphan opened this issue · comments

Ps:请从源码角度分析相关方法。

系统通过LayoutInflater.from创建出布局构造器,inflate方法中,最后会掉用createViewFromTag 这里他会去判断 两个参数 factory2 和factory 如果都会空就会系统自己去创建view, 并且通过一个xml解析器,获取标签名字,然后判断是<Button还是xxx.xxx.xxView. 然后走createView 通过拼接得到全类名路径,反射创建出类。

commented

layoutInflater.inflate 会根据root标签判断是否是merge 是merge则解析merge标签,否则createViewFromTag创建view,优先factory2 没有就factory 来createview 优先 new 如果为空则拼接字符串来反射创建view

通过XML pull解析方式获取view标签 通过反射创建view标签的view对象