繁体   English   中英

AppCompat如何夸大未明确使用AppCompat小部件的布局?

[英]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 ,会发生一些有趣的事情:

  1. LayoutInflater.Factory被施加到默认LayoutInflater通过, setFactory AppCompat中的AppDelegateImpl类实现Factory接口,并根据API级别选择其中一个作为工厂委托。 Factory2也略有不同,主要针对以后的API。
  2. 当您的视图从XML中膨胀时,视图类的名称将传递到FactorycreateView方法,该方法可以覆盖创建的实际视图。
  3. 根据AppCompatViewInflater硬编码的字符串哈希表检查视图的名称,如果找到匹配,则委托代替默认的inflater对视图进行膨胀。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM