欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

安卓app禁止跟随系统文字大小而改变

程序员文章站 2022-03-27 08:45:45
昨天测试给反馈了一个问题,是一个dialogFragment里面的textview显示不全。问题一提出来,我的第一反应肯定是屏幕适配的问题,于是就找了几个机型都是试了一下并没发现问题所在,后来仔细一看测试给发过来的图片发现里面的文字非常大,感觉有点不对劲,肯定是用户自己调了系统的文字大小导致的,最终经过测试验证是这个问题造成的。 知道了问题所在就好办了,剩下的就是寻找解决方案了,自己去尝试了一下把系统文字调到最大,看了一些大型app如何,而支付宝、美团等等这些app的字体都没有改变。这下就有了思路,找到相....

昨天测试给反馈了一个问题,是一个dialogFragment里面的textview显示不全。问题一提出来,我的第一反应肯定是屏幕适配的问题,于是就找了几个机型都是试了一下并没发现问题所在,后来仔细一看测试给发过来的图片发现里面的文字非常大,感觉有点不对劲,肯定是用户自己调了系统的文字大小导致的,最终经过测试验证是这个问题造成的。 知道了问题所在就好办了,剩下的就是寻找解决方案了,自己去尝试了一下把系统文字调到最大,看了一些大型app如何,而支付宝、美团等等这些app的字体都没有改变。这下就有了思路,找到相对应的api去禁止跟随系统文字大小而改变不就解决问题了吗。经过查百度有很多方法都是无效的,下面就例举几个无效的例子,以防大家以后遇到这个问题踩坑。

无效案例(一)

    //在Application中重写getResources()
    @Override
    public Resources getResources() {
        Resources resources = super.getResources();
        if (resources != null && resources.getConfiguration().fontScale != 1.0f) {
            Configuration configuration = resources.getConfiguration();
            configuration.fontScale = 1.0f;
            resources.updateConfiguration(configuration, resources.getDisplayMetrics());
        }
        return resources;
    }

无效案例(二)

   //在BaseActivity中重写getResources()
  @Override
   public Resources getResources() {
     Resources resources = super.getResources();
     Configuration configuration = new Configuration();
     configuration.setToDefaults();
     resources.updateConfiguration(configuration, resources.getDisplayMetrics());
     return resources;
   }

还有类似上面很多的例子,就不一一例举了,都是无效的。

下面说一下我寻找到的有效的方法,,就是使用AutoSize,非常简单并且有效。代码如下:

    //依赖
    api 'me.jessyan:autosize:1.1.2'

    //在Application中的onCreate()方法里加入以下代码
    AutoSizeConfig.getInstance().setExcludeFontScale(true);

至此就可以解决掉此问题。

这是setExcludeFontScale()方法的解释

/**
     * 是否屏蔽系统字体大小对 AndroidAutoSize 的影响, 如果为 {@code true}, App 内的字体的大小将不会跟随系统设置中字体大小的改变
     * 如果为 {@code false}, 则会跟随系统设置中字体大小的改变, 默认为 {@code false}
     *
     * @param excludeFontScale 是否屏蔽
     */
    public AutoSizeConfig setExcludeFontScale(boolean excludeFontScale) {
        isExcludeFontScale = excludeFontScale;
        return this;
    }

此篇文章希望能帮助到大家,让更多的人少踩坑

本文地址:https://blog.csdn.net/weixin_43241356/article/details/112878460

相关标签: Android 安卓