如何在Android Jetpack Compose中使用OTF格式字体文件?
问题原因
你当前的错误是因为直接传入了本地项目的文件路径作为运行时路径,APK打包后不会保留项目的目录结构,commonui/src/main/assets/这个路径在设备运行环境中不存在,因此无法读取到字体文件。
正确实现方案
方案1:使用Android官方推荐的res/font目录加载(更简易,优先推荐)
OTF格式字体原生支持该加载方式,无需放在assets目录:
- 第一步:在模块的
res目录下新建font文件夹,将你的Regular.otf重命名为全小写格式(如regular.otf,res资源不允许大写文件名)后放入该文件夹。 - 第二步:直接在Compose代码中引用:
val fontFamily = FontFamily( Font(R.font.regular) ) Text( text = "Font", style = TextStyle(fontFamily = fontFamily) )
方案2:保留assets/font目录的加载方式
如果确实需要将字体放在assets目录下,需通过Context的AssetManager读取运行时的assets资源:
val context = LocalContext.current // 用remember缓存避免重复加载 val fontFamily = remember { val typeface = Typeface.createFromAsset(context.assets, "font/Regular.otf") FontFamily(typeface) } Text( text = "Font", style = TextStyle(fontFamily = fontFamily) )
注意:传入的路径仅需保留assets根目录后的相对路径,不要加src/main/assets等项目端前缀。
排查验证点
- 确认文件名大小写完全匹配,Android对assets下文件名大小写敏感
- 若为多模块项目,确认字体文件放在对应模块的
src/main/assets目录下,模块打包配置未过滤assets资源
内容的提问来源于stack exchange,提问作者KikuH
相关产品推荐
相关产品推荐

