You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 11:07:07