前言
不知道你们有没有这种烦恼,比如我们在使用TextView控件的时候,设置字体大小是16sp,然后我们在手机设置中将字体的大小从标准修改为小,大或者特大,然后再回到app,发现这个时候TextView上显示的文本完全就不是我们想要的,因为sp会受到系统字体大小设置的影响。
解决方法
这里提供两种解决方法,更推荐使用第二种方式。
方法一
这种方法比较暴躁,也比较简单,就是你布局文件中textSize的单位使用dp,这样就不会受到设置的影响了。但是,这样修改后会有警告,因为google是建议textSize的单位使用sp。
方法二
于是在google上搜索了N多篇博客,基本都是如下的方式,重写getResource()方法。1
2
3
4
5
6
7override 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
11override 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
}