Android API 29可变字体fontVariationSettings不生效及构建报错如何解决
Android 可变字体正确使用方案
问题1:fontVariationSettings 配置不生效的解决方法
API 29 平台原生 TextView 对可变字体的支持存在已知限制,按以下顺序排查即可:
- 确认未同时配置
android:textWeight或textStyle属性,这两个属性的优先级高于可变字体轴配置,会直接覆盖fontVariationSettings的生效 - 确认字体文件存放在
res/font目录下,而非 assets 目录:API 29 对 assets 加载的可变字体参数传递存在缺陷,优先使用资源目录加载字体 - 动态设置参数时注意语法正确,示例:
轴名称必须用单引号包裹,多个轴参数用英文逗号分隔textView.fontVariationSettings = "'wght' 700, 'slnt' -10" - 使用 AppCompat 兼容组件的场景,需升级
androidx.appcompat:appcompat依赖版本到 1.2.0 及以上,同时使用app:fontVariationSettings代替原生属性配置
问题2:styles.xml 中配置可变字体参数触发构建错误的解决方法
构建报错是因为 XML 语法规则中单引号属于特殊字符,需要做转义处理,正确写法参考:
<style name="Text.Inter.Bold"> <item name="android:fontFamily">@font/inter_variable</item> <item name="android:fontVariationSettings">'wght' 700</item> </style>
把参数里的单引号替换为转义符 ' 即可解决资源合并报错的问题。
通用使用规范
- 可变字体资源命名必须符合 Android 资源命名规则:仅使用小写字母、数字和下划线,不允许大写字母和特殊符号
- 如需兼容 API 28 及以下版本,统一使用 AppCompatTextView 组件,避免原生组件的版本兼容问题
- 不要同时设置固定字重、字样式属性和可变字体轴参数,二者会产生冲突
内容的提问来源于stack exchange,提问作者WindowsMaker
相关产品推荐
相关产品推荐

