如何让RichText和TextSpan组件适配系统设置的设备字体大小
问题根因
Text组件内部默认自动绑定MediaQuery.of(context).textScaleFactor参数,所以会响应系统字体大小调整;RichText的textScaleFactor属性默认硬编码为1.0,不会主动读取系统配置,因此不受系统字体设置影响。
解决方案
方案1:手动传入系统字体缩放系数(全场景适用)
使用RichText时手动获取当前上下文的系统缩放值传入即可,适配逻辑和普通Text完全一致:
RichText( // 手动传入系统字体缩放比例 textScaleFactor: MediaQuery.of(context).textScaleFactor, text: TextSpan( children: [ TextSpan(text: "测试文本1", style: TextStyle(fontSize: 14)), TextSpan(text: "测试文本2", style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), ] ) )
方案2:用Text.rich替代RichText(更简便)
如果不需要用到RichText的特殊自定义属性,直接使用Flutter官方封装的Text.rich构造方法即可,它内部已经默认处理了系统字体缩放的适配逻辑,不需要额外传参:
Text.rich( TextSpan( children: [ TextSpan(text: "普通文本"), TextSpan(text: "加粗文本", style: TextStyle(fontWeight: FontWeight.bold)), ] ), style: TextStyle(fontSize: 16), )
注意:如果你的应用全局自定义过
MediaQuery的textScaleFactor做字体大小适配,以上两种方案都会优先读取你自定义的缩放值,符合全局适配规则。
内容的提问来源于stack exchange,提问作者Maikzen
相关产品推荐
相关产品推荐

