• 0
  • 0
分享
  • Android 禁止App字体随系统大小而更改
  • 北极 2022-01-30 10:41:29 字数 1864 阅读 1110 收藏 0

运营反馈,老年用户的手机多设置为大字体,在使用我们app过程中,由于字体被放大,导致布局错乱,部分功能按键遮挡,无法正常使用。

收到问题,着手解决,除了对界面布局进行改写,改为约束布局,对app字体大小也进行统一管理,然而这不是主要的,最主要的是避免系统更改app字体的大小。

Android提供了相关的方法用来实现

 public class DisplayUtil {
        /**
         * 保持字体大小不随系统设置变化(用在界面加载之前)
         * 要重写Activity的attachBaseContext()
         */
        public static Context attachBaseContext(Context context, float fontScale) {
            Configuration config = context.getResources().getConfiguration();
            //正确写法
            config.fontScale = fontScale;
            return context.createConfigurationContext(config);
        }
        /**
         * 保持字体大小不随系统设置变化(用在界面加载之前)
         * 要重写Activity的getResources()
         */
        public static Resources getResources(Context context, Resources resources, float fontScale) {
            Configuration config = resources.getConfiguration();
            if(config.fontScale != fontScale) {
                config.fontScale = fontScale;
                return context.createConfigurationContext(config).getResources();
            } else {
                return resources;
            }
        }
        /**
         * 保存字体大小,后通知界面重建,它会触发attachBaseContext,来改变字号
         */
        public static void recreate(Activity activity) {
            activity.recreate();
        }
}

在BaseActivity中复写相关的方法:

 static float fontScale = 1f;
    @Override
    public Resources getResources() {
        Resources resources = super.getResources();
        return DisplayUtil.getResources(this,resources,fontScale);
    }
    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(DisplayUtil.attachBaseContext(newBase,fontScale));
    }
    
    public void setFontScale(float fontScale) {
        this.fontScale = fontScale;
        DisplayUtil.recreate(this);
    }

经测试,在设置中把字体调整为最大,打开app,app中字体均保持不变,测试华为,vivo,小米机型均生效,于是交付测试。


作者:雨落川川

链接:https://www.jianshu.com/p/c4944ea4b85f

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   你在学习python自动化测试吗?听过requests库吗?  tablib是requests库常年维护的一个可以操作Excel等多种文件格式,将他们变成一种通用数据集的第三方库。  tablib支持的主要数据格式有:  ◆ xls, 老版 office 的 excel 文件格式;  ◆ xlsx系列,新版 office 文件格式;  ◆ json  ◆ yaml  ◆ html  ◆ csv  ◆df,pandas 的 DataFrame, 需要安装 pandas  也就是说,tablib 能把不同格式的数据转化成一种通用的关系型数据格式,然后再各个格式之间无缝切换。  什么叫关系型数据...
            0 0 1072
            分享
          • 今天我们就来浅聊一下什么是接口测试,接口测试又该如何进行呢?一、什么是接口测试?接口测试是一种常见的软件测试方法,用于测试软件系统中不同模块之间的接口。接口是指两个或多个独立软件模块之间进行数据交换的地方。在软件系统中,不同的模块之间相互依赖和交互,这些模块通过接口来实现数据的传递和共享。因此,对于一个软件系统,接口测试是至关重要的,它可以帮助发现接口错误、性能问题、安全漏洞等问题。接口测试的主要目标是检查系统的不同部分之间是否正确地传递数据和调用其他组件。二、接口测试的步骤接口测试没有说有固定的步骤,会根据每个团队的需求产生不同的步骤,但基本步骤大差不差的:1、确定接口确定哪些接口需要测试以...
            0 0 1594
            分享
          •   测试负责人经常要做的事情之一就是安排需求。那么如何合理分配这些需求呢?当然,它不是给任何自由的人。需求划分也是一种艺术活动。  首先需要与业务、项目经理、开发确认背景、目标、变更点、影响范围、计划等。  其次要结合这群学生的考试计划,了解大家目前的需求和进度。如果是紧急重要的需求,尽量给熟悉这个业务和模块的同学优先,保证功能的交付和上线的稳定性。  如果需求不急,可以和其他同学一起练手。一开始可以带旧带新,就是熟悉的同学会和不熟悉的同学一起考,重点地方可以控制。当所有的学生都开始了,你就不需要以旧换新了。  你可能会想,如果需求很迫切,而熟悉这个功能的同学都是工作满满,没有精力去满足新的需...
            0 0 925
            分享
          •   最近碰到一个问题,需求是把做好的报告发到领导邮箱(只能发邮箱,不接受邮箱链接等方式),大家都知道outlook对js是不支持的,只支持最简单的html样式,最后选定的方法是截图,但是报告可能很长啊,怎么能一次性全截下来呢,请大家往下看!  首先本次实现是用的python3.6+selenium+chrome,python的安装和python库的安装就不多说了。用代码控制chrome的时候需要下一个driver,下载地址:http://chromedriver.storage.googleapis.com/index.html  下载之前要注意看看你电脑上装的chrome版本号,把下好的dr...
            0 0 3426
            分享
          •        在当今移动互联网盛行的时代,网络的形态除了有线连接,还有2G/3G/4G/5G/WiFi等多种手机网络连接方式。不同的协议、不同的制式、不同的速率,使移动应用运行的场景更加丰富。目前移动端产品的使用用户所处的网络并非完全流畅的网络环境,因移动端产品使用场景多变,如进地铁、上公交、进电梯等,使得弱网测试显得尤为重要。毕竟考虑到各种场景的客户端展示及容错,能极大提升产品印象和用户体验。本文就和大家分享一下如何上手弱网测试,弱网测试工具的使用。1. 什么是弱网测试?       弱网测试作为健壮性测试的重要...
            12 12 3168
            分享
      • 51testing软件测试圈微信