AppCompat如何膨胀未明确使用AppCompat小部件的布局?

时间:2019-02-07 14:01:55

标签: java android android-appcompat layout-inflater

使用AppCompat时,我发现自己在布局XML文件中使用的是Button之类的东西,而不是android.support.v7.widget.AppCompatButton。我通过view.getClass().getSimpleName()进行了测试,并确认即使我在XML中将其声明为Button,但实际上正在加载的类是AppCompatButton

后台如何工作?

1 个答案:

答案 0 :(得分:1)

在研究此主题以正确提出问题的过程中,我自己找到了答案。

使用AppCompatActivity时,会发生一些有趣的事情:

  1. 通过LayoutInflater.FactoryLayoutInflater应用于默认setFactory。 AppCompat中的AppDelegateImpl类实现了Factory接口,根据API级别选择其中一个作为工厂委托。 Factory2也略有不同,它们是针对以后的API。
  2. 从XML扩展视图时,视图类的名称将传递到Factory的{​​{1}}方法中,该方法可以覆盖已创建的实际视图。
  3. 根据createView中的字符串的硬编码哈希表检查视图的名称,如果找到匹配项,则由委托对视图进行充气,而不是默认的充气器。