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

React Native使用Font.loadAsync加载字体仍报安卓错误求助

React Native安卓端自定义字体加载失败排查与解决

以下是针对你遇到的安卓端字体加载报错问题的实用解决方案:

  • 移除冲突的fontWeight属性
    你的title样式中同时设置了fontFamily: 'PlusJakartaSans-SemiBold'和fontWeight: 600,但自定义字体本身已经是半粗体(SemiBold对应字重600),安卓系统会尝试寻找该字体的600字重变体,导致与你加载的单一版本冲突。直接删除fontWeight属性即可:

    title:{
      fontFamily: 'PlusJakartaSans-SemiBold'
      // 移除 fontWeight: 600
    }
    
  • 核对字体文件的内部名称
    安卓对字体的识别依赖文件内部的PostScript名称,而非文件名。你可以通过以下方式查看:

    • Mac:用Font Book打开字体,右键选择「显示字体信息」查看「PostScript名称」
    • Windows:打开字体文件,在「详细信息」面板查看「字体名称」
      确保Font.loadAsync中的key和样式里的fontFamily与这个内部名称完全一致(注意大小写、空格等细节)。
  • 验证字体加载状态
    在加载函数中加入错误捕获,确认字体是否真的加载成功,排查潜在的路径或文件问题:

    async function loadFont() {
      try {
        await Font.loadAsync({
          'OpenSans-Bold': require('../../assets/fonts/OpenSans-Bold.ttf'),
          'PlusJakartaSans-SemiBold': require('../../assets/fonts/PlusJakartaSans-SemiBold.ttf'),
        });
        console.log('字体加载成功');
        setFontLoaded(true);
      } catch (error) {
        console.error('字体加载失败:', error);
      }
    }
    

    注意安卓区分文件名大小写,检查路径中的文件名是否与实际文件完全匹配。

  • 用AppLoading确保加载完成
    替换返回null的方式,使用expo-app-loading组件等待字体加载完成后再渲染页面,避免组件过早渲染:

    1. 安装依赖:npx expo install expo-app-loading
    2. 修改代码:
    import AppLoading from 'expo-app-loading';
    
    // ...
    
    if (!fontLoaded) {
      return <AppLoading />;
    }
    
  • 彻底清理安卓缓存并重建
    执行以下操作清除残留缓存:

    • 删除node_modules和package-lock.json,重新执行npm install
    • 若使用裸工作流,运行npx expo prebuild --clean
    • 在安卓设备/模拟器上卸载APP后重新安装

内容的提问来源于stack exchange,提问作者gulshan _____

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:26:03