当你在Android中制作布局时,你可以制作像TextView或ImageView这样的默认视图.但是,当您使用AppCompat或material 库时,它们会自动将这些视图映射到AppCompat或material 视图.所以我的问题是,他们如何做到这一点,而我又如何做到这一点?
例如,我有一个自定义的MyTextView,我希望所有的TextView视图都映射到MyTextView.
当你在Android中制作布局时,你可以制作像TextView或ImageView这样的默认视图.但是,当您使用AppCompat或material 库时,它们会自动将这些视图映射到AppCompat或material 视图.所以我的问题是,他们如何做到这一点,而我又如何做到这一点?
例如,我有一个自定义的MyTextView,我希望所有的TextView视图都映射到MyTextView.
这是您的活动(从AppCompatActivity扩展)在幕后做的一些事情.
基本上它看起来是这样的:
LayoutInflator.Factory2
接口的自定义实现调用默认layoutInflator
的setFactory2
方法.createView
个调用传递给AppCompatViewInflater类的实例.AppCompatViewInflater
判断它需要创建的视图的名称,并创建AppCompat视图而不是默认视图(如果有).对于material ,情况相同,但使用的是MaterialComponentsViewInflater,而不是AppCompatViewInflater.
你可以通过从AppCompatViewInflater(或material )扩展来制作你自己的CustomViewInflater,并将这一行与你的充气机的路径放入你的应用程序主题中:
<item name="viewInflaterClass">your.app.package.CustomViewInflater</item>