Kotlin Compose添加OTF字体遇R未解析引用问题求助
Kotlin Compose 自定义OTF字体时"Unresolved reference: R"错误排查方案
针对你在添加OTF字体时遇到的R类引用错误,以下是逐一排查的解决步骤:
1. 验证字体文件的路径与命名
- 确保字体文件放在**
src/main/res/font/**目录下(注意是font单数,不是fonts) - 文件名必须符合Android资源命名规范:仅允许小写字母、数字、下划线,不能包含空格或特殊字符。需保证代码中
R.font.xxx的名称和文件名完全一致(不含后缀) - 确认OTF文件本身未损坏,可尝试用系统字体预览工具打开验证
2. 检查模块Gradle配置
在模块级build.gradle.kts(或build.gradle)的android块中,确保资源目录配置正确:
android { sourceSets { main { res.srcDirs("src/main/res") } } // 其他现有配置... }
同时确认使用的Android Gradle Plugin(AGP)为稳定版本(如8.0+),避免版本兼容问题
3. 修正R类导入逻辑
- 删除手动添加的
import dev.bluemethyst.apps.notix.R,Android Studio会自动根据当前模块的包名生成并导入正确的R类 - 若当前代码的包名(
dev.bluemethyst.apps.notix)与AndroidManifest.xml中声明的package属性一致,可直接使用R.font.xxx无需额外导入
4. 强制重新生成R类
- 执行Gradle命令彻底清理重建:
# macOS/Linux ./gradlew clean build # Windows gradlew.bat clean build - 或在Android Studio中执行:
File -> Invalidate Caches... -> 勾选Invalidate and Restart - 极端情况可手动删除项目根目录下的
.gradle文件夹和模块内的build文件夹,再重新同步项目
5. 确认项目结构合法性
- 确保你的代码所在模块是Android应用模块(而非纯Kotlin/Java库模块),只有Android模块会自动生成R类
- 检查
AndroidManifest.xml中的package属性值是否与代码包名dev.bluemethyst.apps.notix完全一致
替代方案:直接加载字体文件
若上述方法仍无法解决,可尝试绕过R类直接加载字体:
val letteraMonoLLFont = FontFamily( Font( font = resources.openRawResource(R.raw.lettera_mono_ll_regular).readBytes(), weight = FontWeight.Normal ), Font( font = resources.openRawResource(R.raw.lettera_mono_ll_condlight_regular).readBytes(), weight = FontWeight.Bold ) )
注:此方法需将字体文件放在src/main/res/raw/目录下
内容的提问来源于stack exchange,提问作者Caleb
相关产品推荐
相关产品推荐

