您的位置:首页 > 移动开发 > Android开发

Android中sp使用问题及字体大小跟随系统设置

2018-06-06 16:41 585 查看
Android中sp使用问题及字体大小跟随系统设置

本文目的:使读者深入理解及快速使用(代码复制即可用)

sp的理解

Android开发中,Google建议textSize使用sp单位,那么理解一下sp。

关于px、dp、sp的关系可参考下文

Android中px、dp、sp以及drawable、mip-map目录

sp与px的换算:

1sp= scaledDensity * 1 px

(scaledDensity = context.getResources().getDisplayMetrics().scaledDensity)

一般来说,当用户未更改系统设置的字体大上,系统默认scaledDensity = density,即1sp=1dp

使用sp的优点及带来的问题

优点

当用户调整系统设置字体大小时,app字体大小会跟随改变。

这样对于希望看到更大或更小字体的用户非常友好。相当于提供了字体大小跟随系统字体大小变化的功能。

带来的问题

UI设计一般以标准字体大小来设计,当字体大小变化,与UI设计大小不一致时,可能导致显示丑陋、内容显示不全等问题

什么时候使用sp?

当UI设计时考虑到字体大小变化兼容的情况时,可使用sp

个人经验:目前的设计人员一般不会考虑使用sp时的兼容设计,所以需要sp特性的情况并不多。

字体大小跟随系统设置的代码(可在此基础上为app提供是否跟随系统字体大小的功能设置)

【tip】:app已打开情况下(app打开后进程未杀死),更改系统字体大小,再回到app页面,Activity会执行onDestroy,onCreate生命周期

设置字体大小不跟随系统设置的字体大小代码(复制可用)

/**
* 修改APP字体
*
* @param resource  即context.getResources()
* @param fontScale  1.0即为标准大小,不随系统缩放
*/
public static void configFontScale(Resources resource, float fontScale) {
if (resource == null) {
return;
}
try {
Configuration c = resource.getConfiguration();
c.fontScale = fontScale; //字体缩放设置为1.0
resource.updateConfiguration(c, resource.getDisplayMetrics());
} catch (Exception e) {
//do what you want
}
}

代码设置方式

【方式一】在Application中设置

效果:系统字体大小更改后,app打开时,大小不会跟随系统字体大小

存在问题:app已打开情况下(app打开后进程未杀死),更改系统字体大小,再回到app页面,字体会跟随系统字体

public class MyApplication extends Application {

public static final String MAIN_PROCESS_NAME = "com.tuniu.driver";

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

ExtendUtil.configFontScale(getResources(), 1.0f);
}
}

【方式二】在Activity中设置

效果:系统字体大小更改后,app打开时,大小不会跟随系统字体大小

存在问题:解决方式一的问题

public abstract class BaseActivity extends Activity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ExtendUtil.configFontScale(getResources(), 1.0f);
}
}

代码设置方式一问题原因

app已打开情况下(app打开后进程未杀死),更改系统字体大小,再回到app页面,Activity会执行onDestroy,onCreate生命周期,此时的resource的fontScale是跟随系统的,因此方式一存在问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 字体大小
相关文章推荐