当前位置: 首页 > article >正文

Android修改系统默认字体

文章目录

  • 前言
  • 一、方案
    • 1、将定制的custom_fonts.xml配置文件编译到系统中
    • 2、将自定义的字体ttf文件编译到系统中
    • 3、在系统的编译mk中添加fonts.mk的引用
    • 4、修改系统代码,使得优先加载使用custom_fonts.xml


前言

Android系统中的字体配置文件为/system/etc/fonts.xml
关于fonts.xml文件的解读可以参考
Android fonts相关知识以及fonts.xml解读
在这里插入图片描述
从图上可以看出,Android系统默认字体名为sans-serif,所使用的是Roboto系列的字体文件。如果不做另外的设置,那么我们写的程序默认会使用的就是sans-serif,也即是Roboto系列的字体。
因此,要修改系统默认的字体,一般的方法也即是修改/system/etc/fonts.xml文件,修改其中的sans-serif为使用其他的ttf文件。
我们在这里不修改源生的fonts.xml文件,而是新增custom_fonts.xml配置文件。主旨是要将字体配置文件以及对应的ttf文件放到vendor下以减小和源码的耦合。

一、方案

方案的主要工作是:

  • 将定制的custom_fonts.xml配置文件编译到系统中。
  • 将自定义的字体ttf文件编译到系统中。
  • 修改系统代码,使得优先加载使用custom_fonts.xml

1、将定制的custom_fonts.xml配置文件编译到系统中

/vendor/XXX/fonts/mydevice_overlay/fonts/Android.mk
这个mk指定了编译custom_fonts.xml模块,会将custom_fonts.xml文件编译到/system/etc/custom_fonts.xml

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := custom_fonts.xml
LOCAL_MODULE_CLASS := ETC
LOCAL_PREBUILT_MODULE_FILE := $(LOCAL_PATH)/custom_fonts.xml

include $(BUILD_PREBUILT)

/vendor/XXX/fonts/mydevice_overlay/fonts/fonts.mk
该mk用于添加custom_fonts.xml模块到系统,并引用了vendor/XXX/fonts/oem-lobster/fonts.mk

PRODUCT_PACKAGES := \
    custom_fonts.xml \

$(call inherit-product-if-exists, vendor/XXX/fonts/oem-lobster/fonts.mk)

/vendor/XXX/fonts/mydevice_overlay/fonts/custom_fonts.xml
custom_fonts.xml是从/system/etc/fonts.xml拷贝而来,我们对其进行一些修改,将调整默认字体从roboto调整为为其他(这里举例为Lobster-Regular.ttf)。如果有别的字体定义内容,也可以一并在此修改。

<familyset version="23">
    <!-- first font is default -->
    <family name

http://www.kler.cn/a/231312.html

相关文章:

  • 第一个3D程序!
  • Elasticsearch:如何搜索含有复合词的语言
  • 【计算机网络】设备更换地区后无法访问云服务器问题
  • FFmpeg(7.1版本)编译:Ubuntu18.04交叉编译到ARM
  • 表格结构标签
  • (动态规划基础 打家劫舍)leetcode 198
  • 开源模型应用落地-业务优化篇(四)
  • MySQL之建表操作
  • 突破编程_C++_面试(基础知识(8))
  • Vuex如何做持久化存储
  • 【数据分享】1929-2023年全球站点的逐年平均降水量(Shp\Excel\免费获取)
  • 数据可视化教程!我将全程出镜解说
  • OpenAI研究揭示:ChatGPT对生物武器制造影响有限
  • C++ dfs搜索枚举(四十九)【第九篇】
  • 《电子芯片的夜晚》
  • Octave实现位置式PID算法
  • Unreal Engine 中的插值方法示例
  • Rust语言入门小结(第2篇)
  • 获取目标进程导入DLL模块地址的方法
  • golang通用后台管理项目——Go+Vue通用后台管理项目实战
  • 第二讲:数据结构 AcWing 826. 单链表
  • 微信小程序(三十八)滚动容器
  • 基于YOLOv8的暗光低光环境下(ExDark数据集)检测,加入多种优化方式---自研CPMS注意力,效果优于CBAM ,助力自动驾驶(二)
  • Rust 初体验1
  • vector类的模拟实现
  • DevOps落地笔记-21|业务价值:软件发布的最终目的