美文网首页Android进阶之路Android开发Android技术知识
Android 兼容8.0及以上 App全局字体调节、禁止App

Android 兼容8.0及以上 App全局字体调节、禁止App

作者: 安卓搬砖小曾 | 来源:发表于2019-05-12 11:49 被阅读20次

    在APP中,字体的大小单位一般会用sp,然而在改变系统字体大小时,App字体就会随着系统字体大小改变而改变,这就可能造成APP布局的错位。

    造成这种情况的原因是,sp单位除了受屏幕密度影响外,还受到用户的字体大小影响,通常情况下,建议使用sp来跟随用户字体大小设置。除非一些特殊的情况,不想跟随系统字体变化的,可以使用dp”。按照这么说,布局宽高固定写死的地方应该统一用dp显示字体,因为一旦用户在设置中调大字体,宽高写死的布局显示就乱了。

    针对这种情况,查找网上的方法也很多,大多是这样的方法 (重写 Application 或 BaseActivity 中的方法):

    /**
       * 重写 getResource 方法,防止系统字体影响
       */
      @Override
      public Resources getResources() {//禁止app字体大小跟随系统字体大小调节
        Resources resources = super.getResources();
        Configuration configuration = new Configuration();
        configuration.setToDefaults(); 
        resources.updateConfiguration(configuration, resources.getDisplayMetrics());
        return resources;
      }
    

    从上代码可以看出Configuration是new出来的对象,那么系统中原本自带的许多属性可能就遗失了。在大多数的情况下,我们不会察觉到这样的差异。但是在某些情况下,发现出现了空指针;还有就是,configuration.setToDefaults()时,会把所有属性都设置成系统默认,对于有特殊需求的 app 来说是不合理的,这里应该只修改字体大小的设置

    在此就不再多做赘述,最总解决办法是在Application中重写getResources()方法:

    /**
       * 重写 getResource 方法,防止系统字体影响
       */
      @Override
      public Resources getResources() {//禁止app字体大小跟随系统字体大小调节
        Resources resources = super.getResources();
        if (resources != null && resources.getConfiguration().fontScale != 1.0f) {
          android.content.res.Configuration configuration = resources.getConfiguration();
          configuration.fontScale = 1.0f;
          resources.updateConfiguration(configuration, resources.getDisplayMetrics());
        }
        return resources;
      }
    

    两者代码的不同之处,请自行比较吧!

    满心欢喜的以为问题就这么愉快地解决了。将app放在Android8.0上运行,然后将手机的字体设置成最大后发现,问题并没有解决。这时还需要在BaseActivity中同样进行重写getResources()方法。这样当前字体大小的问题就可以解决了。

    到这里问题应该是解决了,惊奇的发现Android 8.0的手机不单单有字体大小设置,还有一项显示模式 , 将显示模式设成最大后,发现app的界面超出了屏幕。(注:部分Android7.0手机也会有显示模式这一项,但是将显示模式设置成最大,不会影响app的界面的,只有Android8.0及其以上才会出现这种情况)。

    image image.gif


    注:目前这种情况我还没有找到解决的办法,有了解决办法,我会在这个博客更新,大神们有解决办法还望留言告知我,大家相互分享。

    相关文章

      网友评论

        本文标题:Android 兼容8.0及以上 App全局字体调节、禁止App

        本文链接:https://www.haomeiwen.com/subject/jzfcaqtx.html