Android中sp使用问题及字体大小跟随系统设置
2018-06-06 16:41
585 查看
Android中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时的兼容设计,所以需要sp特性的情况并不多。
效果:系统字体大小更改后,app打开时,大小不会跟随系统字体大小
存在问题:app已打开情况下(app打开后进程未杀死),更改系统字体大小,再回到app页面,字体会跟随系统字体
【方式二】在Activity中设置
效果:系统字体大小更改后,app打开时,大小不会跟随系统字体大小
存在问题:解决方式一的问题
本文目的:使读者深入理解及快速使用(代码复制即可用)
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] 字体使用dp单位避免设置系统字体大小对排版的影响
- Android 字体使用dp单位避免设置系统字体大小对排版的影响
- Android设置App字体不跟随系统字体大小变化
- 关于网上解决Android4.x系统设置字体大小导致应用布局混乱引起的问题
- android开发中使用sp为字体单位,调整系统字体大小后影响布局的解决方案
- [Android] 字体使用dp单位避免设置系统字体大小对排版的影响
- android系统设置里的字体大小导致的布局混乱问题
- [Android] 字体使用dp单位避免设置系统字体大小对排版的影响
- Android: 设置 app 字体大小不跟随系统字体调整而变化
- Android APP字体大小跟随系统设置
- 系统字体设置(DPI)为120大小的时候,界面错乱问题
- 两种解决修改android手机设置中字体大小后系统布局混乱的方法
- 设置Android app的字体不随系统全局字体大小的变动而变动
- 如何设置android app 的字体大小不受系统字体大小改变的影响
- [Android开发常见问题-9] android如何给PagerTitleStrip设置字体大小
- 设置Android app的字体不随系统全局字体大小的变动而变动
- Android设置字体大小, 该用sp还是dp?
- iOS设置导航与其标题的颜色及字体大小和系统默认TabBar的相关设置与使用方法
- android设置系统语言,字体大小,字体样式导致widget控件失效
- android 中对 gps 默认关闭+语言默认中文的设置+时区设置+修改系统名字+修改系统默认时间+修改屏幕休眠时间+修改usb debug默认关闭+mtk修改默认字体大小