使用换肤框架后,app运行时logcat报错
View class skin.support.widget.SkinCompatTextView is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant).
一开始以为是换肤框架的问题,后面排查发现换肤框架并不是主要原因。
首先:皮肤包在布局加载器 LayoutInflater 获取xml文件生成view的时候把View 替换为皮肤包下面的继承androidx.appcompat.widget. 包下的view,但是androidx.appcompat.widget 包下的控件构造器中有这么一个检查:
图二可以看到,AppCompatTextView 创建时候会对 context 的主题进行检验,是否正确使用AppCompat主题,但是我们的项目一般都会在AndroidMainfest.xml文件Application下声明AppTheme所属主题,那么这是为什么呢。
原因在于
加载布局的时候使用application作为context传入,而ApplicationContext是没有应用主题数据的,必须要使用activity的context才可以。