Android UI适配 用户设置老人显示模式:显示(分辨率)大小和默认字体

  • Post author:
  • Post category:其他


用户设置老人显示模式:显示(分辨率)大小和默认字体, 你的app布局就会出现错乱,超出等问题, 为了适配这个问题可以通过强行忽略显示大小和默认字体大小实现

在这里插入图片描述



很简单, 原理是获取手机默认的字体大小和dpi , 然后在BaseActivity中重写getResources, 恢复它, 代码如下:

  override fun getResources(): Resources {
        val res = super.getResources()
        if (res != null && res.configuration.fontScale != 1.0f) {
            res.configuration.fontScale = 1.0f //恢复默认的[字体大小]
            res.configuration.densityDpi = defaultDisplayDensity //恢复默认的[显示大小]
            res.updateConfiguration(res.configuration, res.displayMetrics)
        }
        return res
    }

    private val defaultDisplayDensity by lazy {
        try {
            val clazz = Class.forName("android.view.WindowManagerGlobal")
            val method = clazz.getMethod("getWindowManagerService")
            method.isAccessible = true
            val iwm = method.invoke(clazz)
            val getInitialDisplayDensity =
                iwm.javaClass.getMethod("getInitialDisplayDensity", Int::class.java)
            getInitialDisplayDensity.isAccessible = true
            val densityDpi = getInitialDisplayDensity.invoke(iwm, Display.DEFAULT_DISPLAY);
            densityDpi as Int
        } catch (e: Exception) {
            e.printStackTrace()
            -1
        }
    }


    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        if (newConfig.fontScale != 1.0f) {
            //刷新
            resources
        }
        super.onConfigurationChanged(newConfig)
    }


测试平台: 华为, Android 9



版权声明:本文为u014418171原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。