前言

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. 2019: 王小波:卡尔维诺与未来的一千年(0条评论)
  2. 2017: Android动画介绍和属性介绍(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

ANR原因以及解决方法

 一. ANR (Application Not Responding)的定义?在Android上,应用程序如果没有响应,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择等待或者强制关闭。一个...

Android自定义音量曲线功能

前言记录一下项目中音量曲线的修改,这个只是记录,不一定正式有效哈。不同平台不一样,不分享流水账,只作为自己个人笔记正文隐藏内容!密码验证后才能查看!提交参考文章

Android focus获取状态简介

前言简单记录一下Android中View的focus状态获取。正文隐藏内容!付费阅读后才能查看!¥1 ¥3多个隐藏块只需支付一次付费阅读参考文章《Android中走马灯(或跑马灯)以及相关问题总结》

Android单编译时出现ninja no work to do

前言记录一下正编译Android后使用ninja出现如下提示:ninja: no work to do.记录于此,方便自己查阅。正文隐藏内容!付费阅读后才能查看!¥2 ¥4多个隐藏块只需支付一次付费阅读参考文章无

关闭jaudiotagger的输出日志

前言jaudiotagger.jar是一个非常好的ID3解析,支持多种音频格式解析,比如MP3、FLAC、WAV、M4A等几种。但是解析时会打印很多日志,记录一下,如何关闭日志打印。正文网上也有很多介绍,但效果一般,最后找到如下方式,一行代码关闭所有日志打印。隐藏内容!付费阅读后才能查看...

穆旦:冥想

为什么万物之灵的我们,遭遇还比不上一棵小树?今天你摇摇它,优越地微笑,明天就化为根下的泥土。为什么由手写出的这些字,竟比这只手更长久,健壮?它们会把腐烂的手抛开,而默默生存在一张破纸上。因此,我傲然生活了几十年,仿佛曾做着万物的导演,实则在它们长久的秩序下我只当一会小小的演员。...