You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何创建含粗体的自定义字体族?XML字体无粗体属性且无法编程设置

解决XML自定义字体族无法设置粗体的问题

我之前在配置自定义XML字体族的时候也踩过这个坑!其实问题出在字体族的XML配置逻辑和编程设置的方式上,下面给你梳理清楚解决步骤:

1. 先正确配置字体族XML文件

XML字体族本身没有单独的"粗体属性",它的核心是关联对应字重的字体文件。你需要在res/font目录下创建字体族文件(比如my_font_family.xml),为不同字重(常规、粗体等)指定对应的字体文件:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 常规字重(400) -->
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font="@font/my_font_regular"/>
    <!-- 粗体字重(700) -->
    <font
        android:fontStyle="normal"
        android:fontWeight="700"
        android:font="@font/my_font_bold"/>
</font-family>

这里要注意:必须同时提供常规和粗体对应的字体文件(比如my_font_regular.ttfmy_font_bold.ttf),并且fontWeight要和字体实际的字重匹配(400对应常规,700对应粗体是行业标准)。

2. 编程设置粗体的正确姿势

如果直接用textView.setTypeface(Typeface.DEFAULT_BOLD)会覆盖你的自定义字体,正确的做法是加载自定义字体族后,指定字重样式:

Kotlin示例:

// 加载自定义字体族
val customTypeface = ResourcesCompat.getFont(context, R.font.my_font_family)
// 指定粗体样式,系统会自动匹配字体族里的粗体文件
textView.setTypeface(customTypeface, Typeface.BOLD)

兼容低版本(用TextViewCompat):

val customTypeface = ResourcesCompat.getFont(context, R.font.my_font_family)
TextViewCompat.setTypeface(textView, customTypeface, Typeface.BOLD)

3. 避坑提示

  • 不要只提供常规字重的字体文件:如果没有对应的粗体文件,系统会给常规字体加"伪粗体",效果发虚,而且可能无法正确响应粗体设置。
  • 不要写错fontWeight数值:比如把粗体写成800,但你的字体文件实际是700字重,系统会找不到匹配的字体,依然用伪粗体。

内容的提问来源于stack exchange,提问作者Near1999

火山引擎 最新活动