Flutter应用如何固定字体大小,不受系统显示字体设置影响?
Flutter应用如何固定字体大小,不受系统显示字体设置影响?
嘿,刚好我之前也踩过类似的坑,来给你唠唠怎么搞定这个需求!
你想要的效果就是不管手机系统的显示字体缩放档位(比如xs、s、l这些)怎么调,应用里的字体和布局大小都纹丝不动对吧?其实核心思路就是全局覆盖系统的文本缩放规则,让应用用我们自己定的固定比例来渲染内容。
你自己写的代码方向完全没问题,我给你拆解下关键逻辑:
- 借助
MaterialApp的builder属性,我们可以全局重写整个应用的MediaQuery配置 - 通过
MediaQuery.of(context).copyWith(textScaler: TextScaler.linear(1.0))这行代码,把文本缩放因子牢牢固定在1.0,直接忽略系统的任何字体缩放设置
下面是完整的可复用代码示例:
MaterialApp( title: 'Bottle App', builder: (context, child) { return MediaQuery( // 固定文本缩放比例为1.0,完全不受系统字体设置影响 data: MediaQuery.of(context).copyWith(textScaler: TextScaler.linear(1.0)), child: child!, ); }, // 根据用户信息是否已保存,跳转对应启动页面 home: isUserInfoSaved ? StartInputScreen() : SignUpScreen() );
这么设置之后,整个应用里的所有文本(包括直接用Text组件的内容、Theme里定义的字体样式)都会严格按照1.0的缩放比例渲染,不管用户把系统字体拉到最大还是缩到最小,你的应用布局和字体大小都能保持一致。
另外要提一句,builder是全局生效的配置,只需要在MaterialApp里设置一次,所有子页面都会自动继承这个规则,不用每个页面单独写重复代码~
备注:内容来源于stack exchange,提问作者akash_zamnani
相关产品推荐
相关产品推荐

