安卓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;
    }

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

你可能感兴趣的:(安卓app禁止跟随系统文字大小而改变)