前言

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。

隐藏内容!
付费阅读后才能查看!
2
3
多个隐藏块只需支付一次

参考文章

  1. 解决mFactorySet在Android Q中被非SDK接口限制的问题 - 掘金 (juejin.cn)
  2. No field mFactorySet in class问题解决(上)_Ciruy B.Heimerdinger的博客-CSDN博客

 历史上的今天

  1. 2024: Android修改默认音量(0条评论)
  2. 2019: 王小波:卡尔维诺与未来的一千年(0条评论)
  3. 2017: Android动画介绍和属性介绍(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

叔本华:人生两大苦

一般人把身外之物当作人生的幸福来源,希望从财产、社会地位、妻室儿女、朋友或是社会那里得到幸福,所以当他失去这些东西或是发现这些令他失望的时候,他的幸福基础就崩塌了。换句话说,这个人的人生重心随着每一次心血来潮而不停改变,完全不在他自身。倘若他是一个富有的人,就可能是今天在乡下别墅消磨时光,明天在买马...

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》正文动态换肤就是常说的外置换肤...