前言
Android换肤插件开发时,需要依赖LayoutInflater.Factory类,在Android P和 之前版本都测试ok,但放在Android Q(10)上测试就失效了。
本文记录一下失效的原因和解决的方法。
正文
在Android Q之前版本,通过如下代码可以设置的
try {
LayoutInflater layoutInflater = LayoutInflater.from(context);
Field mFactorySet = LayoutInflater.class.getDeclaredField("mFactorySet");
mFactorySet.setAccessible(true);
mFactorySet.set(layoutInflater, false);
LayoutInflaterCompat.setFactory2(layoutInflater, SkinInflaterFactory.getInstance());
} catch (Exception e) {
e.printStackTrace();
}
但是,Android Q版本或者之后的版本,使用上面代码就提示错误:
java.lang.NoSuchFieldException: No field mFactorySet in class Landroid/view/LayoutInflater; (declaration of 'android.view.LayoutInflater' appears in /system/framework/framework.jar!classes3.dex)
原因是LayoutInflater中的mFactorySet变量做了版本限制,如下,也就是最大支持Android P,之后的版本就无法使用了。
/**
* If any developer has desire to change this value, they should instead use
* {@link #cloneInContext(Context)} and set the new factory in thew newly-created
* LayoutInflater.
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
private boolean mFactorySet;
网上其他大佬也遇到过,根据大佬说的方向,我这边也整理了一下,测试ok。
参考文章
- 《解决mFactorySet在Android Q中被非SDK接口限制的问题 - 掘金 (juejin.cn)》
- 《No field mFactorySet in class问题解决(上)_Ciruy B.Heimerdinger的博客-CSDN博客》
历史上的今天
暂无评论...
随机推荐
叔本华:人生两大苦
一般人把身外之物当作人生的幸福来源,希望从财产、社会地位、妻室儿女、朋友或是社会那里得到幸福,所以当他失去这些东西或是发现这些令他失望的时候,他的幸福基础就崩塌了。换句话说,这个人的人生重心随着每一次心血来潮而不停改变,完全不在他自身。倘若他是一个富有的人,就可能是今天在乡下别墅消磨时光,明天在买马...
Kotlin面对对象简介
前言简单介绍一下Kotlin面对对象简介。记录一下,方便自己查阅。正文类类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。Kotlin中所有类都继承Any类,它是所有类的父类,如果一个类在声明时没有指定父类,则默认父类为Any类无参数和有参...
史铁生:合欢树
10岁那年,我在一次作文比赛中得了第一。母亲那时候还年轻,急着跟我说她自己,说她小时候的作文作得比我还要好,老师甚至不相信那么好的文章会是她写的。“老师找到家来问,是不是家里的大人帮了忙。我那时可能还不到10岁呢。”我听得扫兴,故意笑:“可能?什么叫‘可能还不到’?”她就解释,我装作根本不在意她的话...
佚名 :可是你没有
我记得那天我借用你的新车,我弄坏了它我以为你一定会杀了我可是你没有 我记得那天我拖你去海滩,而它真如你所说的下雨了我以为你会说“我告诉过你 '可是你没有 我记得那天我和所有男人调情好让你嫉妒,而你真的嫉妒了我以为你一定会离开我可是你没有 ...
Android调试,删除adb devices显示的多余设备
前言最近在Android 9.0的设备上调试,发现无缘无故多处一个设备中,导致一直无法连接机器。重启机器无效重启笔记本有效最近在网上看到,其实不用重启笔记本也可以解决。记录于此,方便自己查阅。正文现象在cmd界面输入adb devices就C:\Users\water>...
换肤库BinSkin1的使用
前言之前介上线了Android的动态换肤库(BiuSkin1PA和BiuSkin1PNA),但没有写demo,因此这次抽空更新一下如何使用这些换肤库。也可以直接看对应动态换肤库的介绍:《动态换肤库:BiuSkin1PA》和《动态换肤库:BiuSkin1PNA》正文动态换肤就是常说的外置换肤...