美文网首页
Android APP字体随系统字体大小改变造成布局错位及解决方

Android APP字体随系统字体大小改变造成布局错位及解决方

作者: 啊耀 | 来源:发表于2018-06-20 17:46 被阅读1154次

    最近有师傅来公司培训,发现了一个之前没有注意过的问题,有些师傅喜欢手机设置成中型大小的字体,固布局文件中TextView字体大小使用sp作为单位时,再改变系统字体大小时,App字体也会随着系统字体大小改变而改变,这就可能造成APP布局的错位,如图:


    e家修师傅.png

    我仔细观察比较了其他的几个APP发现微信的字体不会随着系统字体大小改变,于是百度了一下,找到了问题根源和解决办法,分享一下:
    在这里引入一个知识点:关于sp文档的描述为:

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

    解决的方法也很简单:
    利用Android的Configuration类中的fontScale属性,其默认值为1,会随系统调节字体大小而发生变化,如果我们强制让其等于默认值,就可以实现字体不随调节改变,在工程的Application或BaseActivity中添加下面的代码:

       @Override
        public void onConfigurationChanged(Configuration newConfig) {
            //非默认值
            if (newConfig.fontScale != 1){
                getResources();
            }
            super.onConfigurationChanged(newConfig);
        }
    
        @Override
        public Resources getResources() {//还原字体大小
            Resources res = super.getResources();
            //非默认值
            if (res.getConfiguration().fontScale != 1) {
                Configuration newConfig = new Configuration();
                newConfig.setToDefaults();//设置默认
                res.updateConfiguration(newConfig, res.getDisplayMetrics());
            }
            return res;
        }
    

    解决 如下图:


    e家修师傅.png

    关于8.0不适配:

    Android 8.0上会发现这样修改字体的缩放比例是不起作用的,
    需要在Activity中同样进行复写getResources()方法。

    注意:

    所有想要缩放的控件,不只是TextView,任何控件,只需要将尺寸单位换成sp,
    当然,不想要随字体调节改变的也只需将dp换成其他单位。

    我是阿耀:

    有码走遍天下 无码寸步难行

    1024 - 梦想,永不止步!
    爱编程 不爱Bug
    爱加班 不爱黑眼圈
    固执 但不偏执
    疯狂 但不疯癫
    生活里的菜鸟
    工作中的大神
    身怀宝藏,一心憧憬星辰大海
    追求极致,目标始于高山之巅
    一群怀揣好奇,梦想改变世界的孩子
    一群追日逐浪,正在改变世界的极客
    你们用最美的语言,诠释着科技的力量
    你们用极速的创新,引领着时代的变迁
    ------至所有正在努力奋斗的程序猿们!加油!!

    相关文章

      网友评论

          本文标题:Android APP字体随系统字体大小改变造成布局错位及解决方

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