flutter 文本不随系统设置而改变大小[最全的整理]

文本不随系统设置而改变大小[三]

  • 前言
      • 方案十三:使用Flexible
      • 方案十四:使用MediaQueryData的textScaleFactor属性
      • 方案十五:使用FractionallySizedBox
      • 方案十六:使用自定义文本样式
      • 方案十七:使用自定义绘制(CustomPainter)
      • 方案十八:使用RichText和TextSpan结合MediaQuery
  • 总结


前言

在flutter 越来越来的平台适配中,最常见的一直场景就是,修改了设备的字体大小或者样式,从而导致整个APP 的适配变形等情况的出现,对于这种问题的解决方案,当然就是限制字体了,但是如果一概而论的话,又不太适合,毕竟产品可不管你方不方便的,这里我整理了绝大部分的场景使用方案请添加图片描述


方案十三:使用Flexible

通过使用Flexible小部件,你可以将文本放置在Flexible容器中,以确保文本不随系统字体大小变化而缩放。

import 'package:flutter/material.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: MyHomePage(),);}
}class MyHomePage extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Non-Scaling Text'),),body: Center(child: Row(mainAxisAlignment: MainAxisAlignment.center,children: [Flexible(child: Text('This text will not scale with system font size',style: TextStyle(fontSize: 16.0, // 设置一个基础的字体大小),),),],),),);}
}

在这个例子中,我们将文本包装在Flexible小部件中,这样它就可以根据屏幕大小自动调整大小。通过这种方式,文本不会随系统字体大小变化而缩放。

方案十四:使用MediaQueryData的textScaleFactor属性

通过直接使用MediaQueryDatatextScaleFactor属性,你可以动态调整文本的大小,以确保其不受系统字体大小变化的影响。

import 'package:flutter/material.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: MyHomePage(),);}
}class MyHomePage extends StatelessWidget {Widget build(BuildContext context) {double textScaleFactor = MediaQuery.of(context).textScaleFactor;return Scaffold(appBar: AppBar(title: Text('Non-Scaling Text'),),body: Center(child: Text('This text will not scale with system font size',style: TextStyle(fontSize: 16.0 / textScaleFactor, // 根据textScaleFactor调整文本大小),),),);}
}

在这个例子中,我们直接使用MediaQuery获取了textScaleFactor,并将其应用于文本样式中。这样,文本将动态调整大小,以确保不受系统字体大小变化的影响。

这些方案提供了多样的选择,你可以根据应用的具体需求选择最合适的方式,或者根据情况结合使用不同的方案。希望这些方案对你有帮助,如果有其他问题或需要更多帮助,请随时提问。

方案十五:使用FractionallySizedBox

FractionallySizedBox可以根据父容器的百分比来设置子部件的大小。通过结合使用FractionallySizedBoxText,你可以根据需要设置文本的大小,并确保不受系统字体大小的影响。

import 'package:flutter/material.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: MyHomePage(),);}
}class MyHomePage extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Non-Scaling Text'),),body: Center(child: FractionallySizedBox(widthFactor: 0.8, // 根据需要调整百分比child: Text('This text will not scale with system font size',style: TextStyle(fontSize: 16.0, // 设置一个基础的字体大小),),),),);}
}

在这个例子中,FractionallySizedBoxwidthFactor属性设置为0.8,你可以根据需要调整这个百分比。这样,文本的大小将相对于父容器的大小,而不受系统字体大小的影响。

方案十六:使用自定义文本样式

通过自定义文本样式,你可以直接设置字体大小,确保文本不受系统字体大小的影响。

import 'package:flutter/material.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: MyHomePage(),);}
}class MyHomePage extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Non-Scaling Text'),),body: Center(child: Text('This text will not scale with system font size',style: TextStyle(fontSize: 16.0, // 设置一个基础的字体大小),),),);}
}

在这个例子中,直接在TextStyle中设置了字体大小,确保文本的大小不受系统字体大小变化的影响。

方案十七:使用自定义绘制(CustomPainter)

通过自定义绘制文本,你可以完全控制文本的大小,而不受系统字体大小变化的影响。这可以通过使用CustomPainter实现。

import 'package:flutter/material.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: MyHomePage(),);}
}class MyHomePage extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Non-Scaling Text'),),body: Center(child: CustomPaint(painter: NonScalingTextPainter(),),),);}
}class NonScalingTextPainter extends CustomPainter {void paint(Canvas canvas, Size size) {final text = 'This text will not scale with system font size';final textStyle = TextStyle(fontSize: 16.0, // 设置一个基础的字体大小);final textSpan = TextSpan(text: text,style: textStyle,);final textPainter = TextPainter(text: textSpan,textDirection: TextDirection.ltr,);textPainter.layout(minWidth: 0, maxWidth: size.width);textPainter.paint(canvas, Offset(0, (size.height - textPainter.height) / 2));}bool shouldRepaint(CustomPainter oldDelegate) {return false;}
}

在这个例子中,我们创建了一个NonScalingTextPainter类,实现了CustomPainter接口。在paint方法中,我们手动创建了TextPainter,并使用TextSpanTextStyle定义文本样式。通过手动控制文本的大小和位置,我们确保了文本不受系统字体大小变化的影响。

方案十八:使用RichText和TextSpan结合MediaQuery

结合使用RichTextTextSpan,并使用MediaQuery来获取文本比例因子,可以根据需求手动调整文本的大小。

import 'package:flutter/material.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: MyHomePage(),);}
}class MyHomePage extends StatelessWidget {Widget build(BuildContext context) {double textScaleFactor = MediaQuery.of(context).textScaleFactor;return Scaffold(appBar: AppBar(title: Text('Non-Scaling Text'),),body: Center(child: RichText(text: TextSpan(text: 'This text will not scale with system font size',style: TextStyle(fontSize: 16.0 / textScaleFactor, // 根据textScaleFactor调整文本大小),),),),);}
}

在这个例子中,我们使用RichTextTextSpan来创建文本,并根据MediaQuery获取的文本比例因子手动调整文本的大小,以确保文本不受系统字体大小变化的影响。


总结

这些方案提供了多样的选择,可以根据应用的具体需求选择最合适的方式,或者根据情况结合使用不同的方案。希望这些方案对你有帮助,如果有其他问题或需要更多帮助,请随时提问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/225705.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch:向量搜索 (kNN) 实施指南 - API 版

作者:Jeff Vestal 本指南重点介绍通过 HTTP 或 Python 使用 Elasticsearch API 设置 Elasticsearch 以进行近似 k 最近邻 (kNN) 搜索。 对于主要使用 Kibana 或希望通过 UI 进行测试的用户,请访问使用 Elastic 爬虫的语义搜索入门指南。你也可以参考文章…

JS 倒计时方法(可改造)

起因: 写好备用。 代码: // 直接把方法写在了原型上,通过原型调用 /*** 倒计时* time_str String 到期时间(2023-11-28 16:50:00)* dom_obj Object 需要显示的倒计时的dom对象*/ Date.prototype.countdown function (time_str, dom_obj…

事务的状态和ACID特性

事务就是让数据从一个状态到另一个状态的操作 状态 活动的 事务在执行过程中 部分提交的 事务的最后一个操作已经完成,此时造成的影响只是在内存里,但还没刷写磁盘 失败的 处于活动的或者部分提交的状态时,服务器宕机 中止的 处于失败…

C语言——输入 10 个数,分别统计其中正数、负数、零的个数

#include <stdio.h> int main() {int numbers[10]; // 存储输入的10个数int positive_count 0; // 正数计数器int negative_count 0; // 负数计数器int zero_count 0; // 零计数器// 输入10个数printf("请输入10个数&#xff1a;\n");for (int i 0; i …

vue使用echarts中国地图

需求&#xff1a;Vue3 vite TS 项目内使用 Echarts 5 绘制中国地图。鼠标悬浮省份上面显示指定的数据&#xff0c;地图支持缩放和拖拽的功能&#xff0c;页面放大缩小支持自适应&#xff0c;window.addEventListener(‘resize’, resize); 添加防抖动函数debounce。 一、安装…

Java后端开发——JDBC(万字详解)

Java后端开发——JDBC&#xff08;万字详解&#xff09; 今日目标 掌握JDBC的的CRUD理解JDBC中各个对象的作用掌握Druid的使用 1&#xff0c;JDBC概述 在开发中我们使用的是java语言&#xff0c;那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 …

这个校园门禁考勤技术,还怪高级的咧!

随着科技的不断发展&#xff0c;人脸识别技术在各个领域的应用逐渐成为一种趋势。在企业管理中&#xff0c;人脸考勤系统的引入为传统的考勤方式带来了革命性的变革。 传统的考勤方式存在诸多弊端&#xff0c;例如卡片刷卡易被冒用、指纹考勤不够灵活等问题。而基于三维人脸识别…

基于51单片机冰箱温度控制器设计

**单片机设计介绍&#xff0c; 基于51单片机冰箱温度控制器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机冰箱温度控制器设计是一个非常实用的项目。以下是一个基本的介绍&#xff1a; 系统概述&#xff1a; …

城市安全守护者:分析无人机在交通领域的应用

随着科技的进步&#xff0c;无人机在交通领域的应用不断增加&#xff0c;为智慧交通管理提供了新便利。无人机凭借其灵活性&#xff0c;在违章取证、交通事故侦查、交通疏导等方面展现出巨大的应用潜力。无人机在交通领域的应用有哪些&#xff1f;跟着我们一探究竟。 1、违章取…

NAS层协议学习(三)

消息结构 每个NAS消息包含一个协议鉴别符和一个消息标识。协议鉴别符是一个 4 位值&#xff0c;指示正在使用的协议&#xff0c;即对于 EPS NAS 消息是 EMM 或 ESM。消息标识指示发送的特定消息。 EMM 消息还包含一个安全标头&#xff0c;指示消息是否受到完整性保护和/或加密…

​无人机石油管道巡检方案新亮点:灵活准确又高效

在当前石油工业的安全管理中&#xff0c;无人机技术逐渐成为一种不可或缺的工具。随着我国油气管道里程的持续增长&#xff0c;确保这些关键基础设施的安全运行变得越来越重要。传统的巡检方法已经无法满足现代油气行业的需求&#xff0c;而无人机石油管道巡检技术的应用提供了…

Coremail出席2023信息技术应用创新论坛

11月25日&#xff0c;2023信息技术应用创新论坛在常州开幕。江苏省工业和信息化厅副厅长池宇、中国电子工业标准化技术协会理事长胡燕、常州市常务副市长李林等领导出席论坛并致辞。中国工程院院士郑纬民出席并作主题报告。来自产学研用金等各界的千余名代表参加本次论坛。作为…