前言
APP主题的字体模块,如果用户把系统字体设置的很大,就会影响我们APP的显示效果,如果不想被影响/自定义字体大小,就需要忽略系统字体的设置参数
方法一(不是很推荐):
使用:在基类的
BaseActivity
中添加如下代码即可。如果没有抽取的话,那你就在每个Activity
中去重写一下这个方法
原理:在Android中控制字体大小的是
Configuration
类中的fontScale
属性,其默认值为1
,会随系统调节字体大小而发生变化,我们强制让其等于默认值,就可以实现字体不随调节改变。
缺点:
getResources()
方法,会在页面获取资源时多次调用,比如用手点一下页面任意位置,就会多次调用此函数,频繁调用浪费资源。
// 字体大小不跟随系统
@Override
public Resources getResources() {
Resources res = super.getResources();
Configuration config = new Configuration();
config.setToDefaults(); // 设置为默认值
res.updateConfiguration(config, res.getDisplayMetrics());
return res;
}
方法二(强烈推荐):
使用:在基类的
BaseActivity
中添加如下代码即可。
原理:基类
Activity
,在初始化Context
时,将 字体缩放比例(fontScale)
始终设置为1
。
// 字体大小不跟随系统
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(getConfigurationContext(newBase));
}
private static Context getConfigurationContext(Context context) {
Configuration configuration = context.getResources().getConfiguration();
configuration.fontScale = 1;
return context.createConfigurationContext(configuration);
}