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

Kotlin Android项目调用getFont()触发ResourcesNotFoundException求助

问题:更换PDF字体触发ResourcesNotFoundException异常

在Kotlin Android项目中创建PDF文档,使用android.graphics.Paint向PDF添加内容时,遇到字体加载问题:使用timesnewroman字体的代码可正常运行,但切换为arialth字体后触发ResourcesNotFoundException异常。

正常运行代码

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    titlePaint.typeface = Typeface.create(resources.getFont(R.font.timesnewroman), Typeface.NORMAL)
}

报错代码

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    titlePaint.typeface = Typeface.create(resources.getFont(R.font.arialth), Typeface.NORMAL)
}

字体文件情况:res/font目录下存在arialth.ttf和timesnewroman.ttf两个字体文件。


排查步骤与解决方法

  • 检查字体文件名与资源引用的一致性
    Android资源文件名要求全小写且不能包含特殊字符,确认arialth.ttf的文件名完全是小写,和代码中R.font.arialth的引用名完全匹配(如果文件名是ArialTH.ttf这类带大写的,会导致R类无法生成对应引用)。

  • 重新构建项目更新R类
    点击Android Studio菜单栏的Build > Clean Project,执行完成后再点击Build > Rebuild Project,强制重新生成R类,确保arialth字体的资源引用被正确添加。

  • 验证字体文件的有效性
    检查arialth.ttf是否为完整未损坏的字体文件:可以用系统自带的字体查看器打开文件,确认能正常显示字体样式;如果文件损坏,替换为可靠的同版本字体文件。

  • 兼容低版本系统的备选方案
    如果需要适配Android 8.0(API 26)以下的系统,建议改用Typeface.createFromAsset()从assets目录加载字体,避免resources.getFont()的版本限制:

    // 先在main目录下创建assets/fonts文件夹,放入arialth.ttf
    val typeface = Typeface.createFromAsset(assets, "fonts/arialth.ttf")
    titlePaint.typeface = typeface
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:39:46