Android兼容8.0App全局字体调节、禁止App字体随系统字体大小而更改
Android兼容8.0App全局字体调节、禁⽌App字体随系统字体
⼤⼩⽽更改
在APP中,字体的⼤⼩单位⼀般会⽤sp,然⽽在改变系统字体⼤⼩时,App字体就会随着系统字体⼤⼩改变⽽改变,这就可能造成APP布局的错位。计算机的发展阶段
六一儿童节资料
造成这种情况的原因是,sp单位除了受屏幕密度影响外,还受到⽤户的字体⼤⼩影响,通常情况下,建议使⽤sp来跟随⽤户字体⼤⼩设置。除⾮⼀些特殊的情况,不想跟随系统字体变化的,可以使⽤dp”。按照这么说,布局宽⾼固定写死的地⽅应该统⼀⽤dp显⽰字体,因为⼀旦⽤户在设置中调⼤字体,宽⾼写死的布局显⽰就乱了。
针对这种情况,查⽹上的⽅法也很多,⼤多是这样的⽅法 (重写 Application 或 BaseActivity 中的⽅法):
1/**
2  * 重写 getResource ⽅法,防⽌系统字体影响
3  */
抗原试剂盒价格战4  @Override
5  public Resources getResources() {//禁⽌app字体⼤⼩跟随系统字体⼤⼩调节
6    Resources resources = Resources();
7    Configuration configuration = new Configuration();
8    configuration.setToDefaults();
9    resources.updateConfiguration(configuration, DisplayMetrics());
10    return resources;
11  }
从上代码可以看出Configuration是new出来的对象,那么系统中原本⾃带的许多属性可能就遗失了。在⼤多数的情况下,我们不会察觉到这样的差异。但是在某些情况下,发现出现了空指针;还有就是,configuration.setToDefaults()时,会把所有属性都设置成系统默认,对于有特殊需求的 app 来说是不合理的,这⾥应该只修改字体⼤⼩的设置。
人生若只如初见的意思在此就不再多做赘述,最总解决办法是在Application中重写getResources()⽅法:
1/**
2  * 重写 getResource ⽅法,防⽌系统字体影响
3  */绍兴旅游攻略
4  @Override
5  public Resources getResources() {//禁⽌app字体⼤⼩跟随系统字体⼤⼩调节
6    Resources resources = Resources();
7    if (resources != null && Configuration().fontScale != 1.0f) {
8      s.Configuration configuration = Configuration();
9      configuration.fontScale = 1.0f;
10      resources.updateConfiguration(configuration, DisplayMetrics());
11    }
12    return resources;
13  }
手机信号差
两者代码的不同之处,请⾃⾏⽐较吧!
满⼼欢喜的以为问题就这么愉快地解决了。将app放在Android8.0上运⾏,然后将⼿机的字体设置成最⼤后发现,问题并没有解决。这时还需要在BaseActivity中同样进⾏重写getResources()⽅法。这样当前字体⼤⼩的问题就可以解决了。
到这⾥问题应该是解决了,惊奇的发现Android 8.0的⼿机不单单有字体⼤⼩设置,还有⼀项显⽰模式 ,将显⽰模式设成最⼤后,发现app 的界⾯超出了屏幕。(注:部分Android7.0⼿机也会有显⽰模式这⼀项,但是将显⽰模式设置成最⼤,不会影响app的界⾯的,只有Android8.0及其以上才会出现这种情况)。
⽬前这种情况我还没有到解决的办法,有了解决办法,我会在这个博客更新,⼤神们有解决办法还望留⾔告知我,⼤家相互分享⼀下

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。