Flutter自定义字体仅Android模拟器生效,三星A52s真机不显示
Flutter自定义字体仅Android真机(三星A52s,Android14/One UI6.1)不显示的排查方案
问题描述
开发的Flutter应用使用自定义.ttf字体,仅在**三星A52s手机(Android 14,One UI 6.1)**上显示默认字体,以下场景均正常:
- Android模拟器
- iOS模拟器及真机
- 其他使用同款字体的第三方应用
已尝试的无效操作:
- 卸载重装应用
- 清除应用缓存
- 更换其他字体文件
- 修改应用包名(如
com.company.app改为com.company.app2) - 执行
flutter clean后重新构建 - 升级手机Android系统
- 重启手机
可能的解决方案
1. 检查字体文件兼容性(针对One UI)
部分三星One UI版本对字体文件格式有更严格的解析要求:
- 将
.ttf字体转换为.otf格式后重新引入 - 使用FontForge等工具重新导出字体,清除文件内损坏的元数据或无效表项
2. 显式指定字体权重
Flutter在Android真机上可能自动匹配系统字体权重,若自定义字体未明确声明权重,会被默认字体替代。在TextStyle中强制指定:
Text( "示例文本", style: TextStyle( fontFamily: "YourCustomFont", fontWeight: FontWeight.normal, // 匹配字体实际权重 ), )
3. 验证Flutter字体注册准确性
确保pubspec.yaml中字体注册无拼写错误、路径正确:
flutter: fonts: - family: YourCustomFont fonts: - asset: fonts/YourCustomFont-Regular.ttf weight: 400 # 若有其他权重版本,同步注册
注册后执行flutter pub get,全局主题或局部文本中正确引用fontFamily。
4. 关闭三星系统字体强制优化
部分One UI版本存在强制使用系统字体的设置:
- 打开手机设置 → 显示 → 字体大小与样式
- 关闭“使用系统字体”或类似选项(不同版本名称可能略有差异)
5. 补充AndroidManifest配置
在android/app/src/main/AndroidManifest.xml的<application>标签内添加:
<meta-data android:name="android.content.FontProvider" android:resource="@xml/font_provider"/>
同时创建android/app/src/main/res/xml/font_provider.xml文件:
<?xml version="1.0" encoding="utf-8"?> <font-provider xmlns:android="http://schemas.android.com/apk/res/android" android:fontProviderAuthority="com.your.package.name.fontprovider" android:fontProviderPackage="com.your.package.name" android:fontProviderQuery="YourCustomFont" android:fontProviderCerts="@array/fonts_certs"/>
(替换com.your.package.name为应用包名,YourCustomFont为字体名称)
内容的提问来源于stack exchange,提问作者Bas van Dijk
相关产品推荐
相关产品推荐

