Android 7.0以后 字体不随着系统的字体而变化

如题所示。我们不啰嗦。直接上源码:

写一个工具类

/**
 * 修改字体帮助类
 */
object DispUtility {
    /**
     * 禁用7.0(23)以上
     * app内的视图和文字大小随系统视图和文字大小的改变而改变
     */
    @JvmStatic
    fun disabledDisplayDpiChange(res: Resources): Resources {
        val newConfig = res.configuration
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //字体非默认值
            if (res.configuration.fontScale != 1f) {
                newConfig.fontScale = 1f
            }
            newConfig.densityDpi = defaultDisplayDensity
            res.updateConfiguration(newConfig, res.displayMetrics)
        } else { //字体非默认值
            if (res.configuration.fontScale != 1f) {
                newConfig.fontScale = 1f //设置默认
                res.updateConfiguration(newConfig, res.displayMetrics)
            }
        }
        return res
    }

    /**
     * 获取手机出厂时默认的densityDpi
     */
    private val defaultDisplayDensity: Int
        @SuppressLint("PrivateApi")
        get() = try {
            val aClass = Class.forName("android.view.WindowManagerGlobal")
            val method = aClass.getMethod("getWindowManagerService")
            method.isAccessible = true
            val iwm = method.invoke(aClass)
            val getInitialDisplayDensity = iwm.javaClass.getMethod("getInitialDisplayDensity", Int::class.javaPrimitiveType)
            getInitialDisplayDensity.isAccessible = true
            val densityDpi = getInitialDisplayDensity.invoke(iwm, Display.DEFAULT_DISPLAY)
            densityDpi as Int
        } catch (e: Exception) {
            e.printStackTrace()
            -1
        }
}

然后在我们的BaseActivity里面添加这行引用代码 就行了

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(layoutResId)
    DispUtility.disabledDisplayDpiChange(this.resources)
    initUI()
    initData()
}

参考的链接:

https://blog.csdn.net/duyiqun/article/details/96976197

https://blog.csdn.net/sunshine199221/article/details/72765931

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值