textSize 的单位一般使用 sp,sp 与系统字体大小相关,1sp 占据的大小相当于 1d p乘以 fontScale。系统字号为 normal 时,fontScale = 1;字号越大 fontScale 的值越大。
有些情境下,我们希望在 APP 中保持字体的缩放比,而不随系统字体变化而变化。做法有两种:
- 把所有的 textSize 单位都换成 dp(显然无论是官方还是开发者自己都不推荐吧)
- 保持 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 内实现自己的字体大小设置、语言选择,也可以用类似的思路。