关于网上解决Android4.x系统设置字体大小导致应用布局混乱引起的问题

本文探讨了Android系统中字体大小变化对应用布局的影响,并提出了两种解决方案:一是全面使用dp单位,二是仅在特定界面重写getResources()方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从Android4.0系统以后,提供了设置“字体大小”来改变系统字体的选项。当然,这对于老人机的厂商来说也算是个福音,只不过对于开发者来说,就略有些坑了。因为从如果用户设置了放大或者缩小字号的时候,如果字体或者有些地方用了sp做单位,布局就会乱了。

网上一搜,还是有很多解决方案的。普遍的做法是在Acitivty基类里面重写getResources()方法,如下:

@Override
  public Resources getResources() {
    Resources res = super.getResources();
    Configuration config = new Configuration();
      config.setToDefaults();
      res.updateConfiguration(config, res.getDisplayMetrics());
    return res;
  }

这种做法确实能起到作用。不过经多次测试发现,在界面渲染时会一直调用getResources(),从而拉低app的性能,元素太多的界面切换、操作都会出现卡顿的现象。

目前也没找到太好的解决方案,现在想到的解决方案有两个:

1、项目全部采用dp单位,就可以在不重写getResources()的前提下,即使设置了系统字号也不会搞乱布局。

2、在需要适应切换字号的界面,才重写getResources()。

按照方法2,可以对getResources()做稍微调整。


private boolean needCustomResources(){
    return true;
  }
  @Override
  public Resources getResources() {
    Resources res = super.getResources();
    if(needCustomResources()){
      Configuration config = new Configuration();
      config.setToDefaults();
      res.updateConfiguration(config, res.getDisplayMetrics());
    }
    return res;
  }

这样,在不需要适应字号的界面,只要重写一下neeCustomResources(),返回false就OK了。

这两个都是折中的方法,如果有其他方案的,期待分享!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值