使用Support Library 26.1实现XML字体:渲染问题
解决Fonts in XML的XML警告问题
嘿,我之前在项目里用Fonts in XML的时候也碰到过一模一样的情况——运行起来字体显示没问题,但XML编辑器里就是飘着警告,给你分享下我当时排查解决的思路:
常见警告1:属性兼容警告
如果你在XML里用的是android:fontFamily="@font/your_custom_font",那大概率会收到类似「该属性仅在API XX+生效」的警告。因为咱们用的是Support Library 26.1.0,要兼容API19+的话,应该改用Support Library提供的命名空间属性:
<!-- 替换成app命名空间的属性 --> app:fontFamily="@font/your_custom_font"
记得要在布局根节点声明Support Library的命名空间:
xmlns:app="http://schemas.android.com/apk/res-auto"
常见警告2:资源未找到/缓存警告
如果警告是提示找不到字体资源,但运行时字体明明显示正常,那基本就是Android Studio的缓存闹的。可以试试这几个操作:
- 点击菜单栏的
File → Invalidate Caches...,然后选择Invalidate and Restart重启IDE - 清理项目构建缓存:
Build → Clean Project,再Build → Rebuild Project
额外检查点
再确认下你的字体文件是不是放在res/font/目录下,文件名有没有符合Android资源命名规则(不能有大写字母、空格,只能用小写字母、数字、下划线),比如custom_font.ttf是对的,CustomFont.ttf就会出问题。
另外,如果你是在styles.xml里定义字体样式,也要确保用的是app:fontFamily而不是android:fontFamily,比如:
<style name="CustomButtonStyle" parent="Widget.AppCompat.Button"> <item name="app:fontFamily">@font/your_custom_font</item> </style>
这样操作后,XML里的警告应该就会消失啦!
内容的提问来源于stack exchange,提问作者wheatfield




