Android中TextView设置自定义字体报错:找不到资源且无assets文件夹
解决Android自定义字体找不到Asset文件的问题
别担心,这个问题在Android开发里太常见了,我来一步步帮你搞定:
1. 先创建Assets文件夹
你说项目里没有assets文件夹,这很正常,Android Studio默认不会自动生成它,手动创建超简单:
- 右键点击你的app模块(不是整个项目根目录哦)
- 依次选择
New -> Folder -> Assets Folder - 在弹出的窗口里,保持默认的
Target Source Set为main,直接点击Finish
这样assets文件夹就会自动出现在src/main目录下,和res文件夹同级,这是Android官方要求的正确位置。
2. 放置字体文件到正确路径
按照你代码里的路径font/kaushan.otf,你需要:
- 在刚创建的assets文件夹里,新建一个名为
font的子文件夹(注意是小写,Android的asset路径严格区分大小写!) - 把你的
kaushan.otf字体文件复制到这个font文件夹里
现在文件结构应该是:src/main/assets/font/kaushan.otf,和你代码里的路径完全对应。
3. 检查代码和细节
确认你的代码里的路径和实际文件路径完全一致,尤其是大小写!比如如果你的文件夹是Font(大写F),或者字体文件名是Kaushan.otf(大写K),都会导致找不到文件的错误。
另外,也可以临时加一段代码验证文件是否存在:
try { String[] files = getAssets().list("font"); for (String file : files) { Log.d("FontCheck", file); } } catch (IOException e) { e.printStackTrace(); }
如果日志里能看到kaushan.otf,就说明路径没问题了。
4. 额外小提示(可选)
如果你用的是Android 8.0(API 26)及以上的版本,其实可以用更推荐的方式管理字体:把字体文件放到res/font目录下(没有的话右键res文件夹创建Font Folder即可),然后直接通过资源ID调用:
Typeface face = ResourcesCompat.getFont(this, R.font.kaushan); headerText.setTypeface(face);
这种方式不需要手动管理asset路径,还能支持字体权重等特性,更省心。
内容的提问来源于stack exchange,提问作者Pavel Vorobyov
相关产品推荐
相关产品推荐

