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组件等待字体加载完成后再渲染页面,避免组件过早渲染:- 安装依赖:
npx expo install expo-app-loading - 修改代码:
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 _____
相关产品推荐
相关产品推荐

