textSize 的单位一般使用 sp,sp 与系统字体大小相关,1sp 占据的大小相当于 1d p乘以 fontScale。系统字号为 normal 时,fontScale = 1;字号越大 fontScale 的值越大。

有些情境下,我们希望在 APP 中保持字体的缩放比,而不随系统字体变化而变化。做法有两种:

  1. 把所有的 textSize 单位都换成 dp(显然无论是官方还是开发者自己都不推荐吧)
  2. 保持 fontScale = 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void keepFontScaleNormal()
{
Configuration config = getResources().getConfiguration();
config.fontScale = 1.0f;
getResources().updateConfiguration(config, null);
}

@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);

keepFontScaleNormal();
}

@Override
public void onCreate()
{
super.onCreate();

keepFontScaleNormal();

………
}

延伸

在 APP 内实现自己的字体大小设置、语言选择,也可以用类似的思路。