![](/img/trans.png)
[英]Inflate exception occurs 'androidx.appcompat:appcompat:1.1.0'
[英]How does AppCompat inflate layouts that do not explicitly use AppCompat widgets?
我在使用AppCompat时遇到过,我在布局XML文件中使用了Button
之类的东西而不是android.support.v7.widget.AppCompatButton
。 我通过view.getClass().getSimpleName()
进行了测试,并确认即使我在XML中将其声明为Button
,但正在加载的类实际上是AppCompatButton
。
这是如何工作的?
在研究这个主题的过程中,为了正确地提出问题,我自己发现了答案。
使用AppCompatActivity
,会发生一些有趣的事情:
LayoutInflater.Factory
被施加到默认LayoutInflater
通过, setFactory
。 AppCompat中的AppDelegateImpl
类实现Factory
接口,并根据API级别选择其中一个作为工厂委托。 Factory2
也略有不同,主要针对以后的API。 Factory
的createView
方法,该方法可以覆盖创建的实际视图。 AppCompatViewInflater
硬编码的字符串哈希表检查视图的名称,如果找到匹配,则委托代替默认的inflater对视图进行膨胀。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.