Android XML字体在7.0版本无法正常工作求助
嘿,我帮你梳理下这个问题——你遇到的Android 7.0+字体配置失效,核心原因是字体文件的存放位置不对,再加上一些配置细节的小疏漏,咱们一步步来修复:
一、关键问题:字体文件夹放错地方了
你说在drawable目录下建了font文件夹,但从Android 8.0(API 26)开始,系统原生支持XML字体家族,而AppCompat库对7.0及以上版本的兼容要求,字体文件必须放在**res/font/目录**下,不是drawable/font/。这就是7.0+版本失效的核心原因!
二、具体修复步骤
1. 移动字体文件位置
把drawable/font/下的所有字体文件(比如timeburnerbold.ttf、typo_grotesk_bold.ttf),直接移到res/font/目录里——如果res下没有font目录,新建一个就行。
2. 简化字体家族XML配置
你的现有配置重复写了android:和app:前缀,其实用AppCompat库的话,只保留app:前缀就足够(能更好地向下兼容),简化后的配置如下:
<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:app="http://schemas.android.com/apk/res-auto"> <font app:font="@font/timeburnerbold" app:fontStyle="normal" app:fontWeight="400" /> <font app:font="@font/typo_grotesk_bold" app:fontStyle="normal" app:fontWeight="700" /> </font-family>
小提示:如果你的compileSdk是27,也可以用
android:前缀,但app:前缀的兼容性覆盖更全。
3. 确保用对AppCompat控件和主题
你的Gradle已经配置了27.0.0的support库,要确保布局里的文字控件用的是android.support.v7.widget.AppCompatTextView(或者让你的App主题继承AppCompat主题,系统会自动替换默认控件为AppCompat版本)。
比如你的App主题应该是这样的:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- 其他主题配置项 --> </style>
4. 正确引用字体家族
在布局里引用字体时,用app:fontFamily而不是只写android:fontFamily(当然两者都写也没问题,但app:前缀是AppCompat兼容的关键):
<android.support.v7.widget.AppCompatTextView android:layout_width="wrap_content" android:layout_height="wrap_content" app:fontFamily="@font/你的字体家族XML文件名" />
三、额外排查小技巧
- 检查字体文件名:必须符合Android资源命名规范,只能用小写字母、数字、下划线,不能有大写或特殊字符。
- 清理重建项目:有时候缓存会搞事情,执行
Build > Clean Project再Build > Rebuild Project试试。
按照这些步骤调整后,Android 7.0+版本应该就能正常加载字体了!
内容的提问来源于stack exchange,提问作者Nouman Ghaffar

