使用AppCompat时,我发现自己在布局XML文件中使用的是Button
之类的东西,而不是android.support.v7.widget.AppCompatButton
。我通过view.getClass().getSimpleName()
进行了测试,并确认即使我在XML中将其声明为Button
,但实际上正在加载的类是AppCompatButton
。
后台如何工作?
答案 0 :(得分:1)
在研究此主题以正确提出问题的过程中,我自己找到了答案。
使用AppCompatActivity
时,会发生一些有趣的事情:
LayoutInflater.Factory
将LayoutInflater
应用于默认setFactory
。 AppCompat中的AppDelegateImpl
类实现了Factory
接口,根据API级别选择其中一个作为工厂委托。 Factory2
也略有不同,它们是针对以后的API。Factory
的{{1}}方法中,该方法可以覆盖已创建的实际视图。 createView
中的字符串的硬编码哈希表检查视图的名称,如果找到匹配项,则由委托对视图进行充气,而不是默认的充气器。