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
相关产品推荐
相关产品推荐

