You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android:如何将自定义字体设为默认字体的回退字体?

Android 自定义字体作为系统默认字体回退的最佳实践

可以通过XML定义字体族结合全局主题配置实现,这是无需遍历控件的最优方案,具体步骤如下:

1. 创建字体族XML文件

在res/font目录下新建字体族配置文件(比如noto_with_fallback.xml),按顺序声明主字体(系统Noto)和自定义回退字体:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 主字体:系统默认Noto字体(以中文为例) -->
    <font android:fontStyle="normal" android:fontWeight="400" android:font="@android:font/noto_sans_cjk_sc"/>
    <font android:fontStyle="italic" android:fontWeight="400" android:font="@android:font/noto_sans_cjk_sc_italic"/>
    
    <!-- 回退字体:你的自定义字体,需提前放入res/font目录 -->
    <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/your_custom_cjk_font"/>
    <font android:fontStyle="italic" android:fontWeight="400" android:font="@font/your_custom_cjk_font_italic"/>
</font-family>

注意:如果系统内置Noto的引用存在版本兼容性问题,可直接将Noto字体文件打包到项目res/font目录,替换为本地字体引用(比如@font/noto_sans_cjk_sc)。

2. 全局主题应用字体族

在res/values/styles.xml的App主题中配置默认字体族,让所有文本控件自动继承:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <!-- 其他主题属性 -->
    <item name="android:fontFamily">@font/noto_with_fallback</item>
    <!-- 兼容AppCompat库的控件,需添加此属性 -->
    <item name="fontFamily">@font/noto_with_fallback</item>
</style>

关键说明

  • Android系统会自动按字体族内的顺序匹配字形:优先用主字体显示字符,当主字体缺失对应字形时,自动切换到回退字体。
  • 需保证自定义字体的fontStyle和fontWeight与主字体一一对应,否则回退逻辑可能失效。
  • 常规文本控件(TextView、Button、EditText等)都会自动继承主题字体,无需单独设置;特殊控件如WebView需单独配置字体规则。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:40:33