有效的防止系统字体修改影响app

前言

  不知道你们有没有这种烦恼,比如我们在使用TextView控件的时候,设置字体大小是16sp,然后我们在手机设置中将字体的大小从标准修改为小,大或者特大,然后再回到app,发现这个时候TextView上显示的文本完全就不是我们想要的,因为sp会受到系统字体大小设置的影响。

解决方法

  这里提供两种解决方法,更推荐使用第二种方式。

方法一

  这种方法比较暴躁,也比较简单,就是你布局文件中textSize的单位使用dp,这样就不会受到设置的影响了。但是,这样修改后会有警告,因为google是建议textSize的单位使用sp。

方法二

  于是在google上搜索了N多篇博客,基本都是如下的方式,重写getResource()方法。

1
2
3
4
5
6
7
override fun getResources(): Resources {
val resources = super.getResources()
val config = Configuration()
config.setToDefaults()
resources.updateConfiguration(config, resources.displayMetrics)
return resources
}

  我想问,你们这样写就没有一点点的疑问吗,这样会将Configuration的配置全部重置为默认的,也就是说你设置的一些配置都没有了。
  于是我将代码修改为了下面的,从当前的resources获取configuration然后对其的fontScale进行修改。

1
2
3
4
5
6
7
8
9
10
11
override fun getResources(): Resources {
val resources = super.getResources()
if (resources != null) {
val config = resources.configuration
if (config != null && config.fontScale != 1F) {
config.fontScale = 1F
resources.updateConfiguration(config, resources.displayMetrics)
}
}
return resources
}

本文标题:有效的防止系统字体修改影响app

文章作者:严方雄

发布时间:2018-07-15

最后更新:2018-09-13

原始链接:http://yanfangxiong.com/2018/07/15/有效的防止系统字体修改影响app/

0%