Android 9系统添加系统字体

本文讲述了如何将字体库从app资源转移到系统img,以节省空间,并详细介绍了编译patch、修改fonts.xml及APK调用字体的步骤,以及在高版本Android中的适配方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        近日,预制了一套系统字体,本来字体可以在app中单独放置到资源,然后调用,但由于系统中定制的apk有多个需要用该字库,为了节约空间,就把字库文件预制到了系统,一份文件可以供多个apk去使用。

        具体改动patch如下:

在external/noto-fonts目录,将字体源文件编译到system.img:

--- a/Android.mk
+++ b/Android.mk
@@ -311,7 +311,8 @@ font_src_files += \
     SourceHanSansCN-Light.otf \
     SourceHanSansCN-Medium.otf \
     SourceHanSansCN-Normal.otf \
-    SourceHanSansCN-Regular.otf
+    SourceHanSansCN-Regular.otf \
+    FZKTJW.ttf
 endif # !EXCLUDE_SERIF_FONTS && !SMALLER_FONT_FOOTPRINT
 
 $(foreach f, $(font_src_files), $(call build-one-font-module, $(f)))
diff --git a/fonts.mk b/fonts.mk
index 96b8746..baf66ae 100644
--- a/fonts.mk
+++ b/fonts.mk
@@ -54,6 +54,7 @@ PRODUCT_PACKAGES := \
     SourceHanSansCN-Medium.otf \
     SourceHanSansCN-Normal.otf \
     SourceHanSansCN-Regular.otf \
+    FZKTJW.ttf \
     NotoSansCoptic-Regular.ttf \
     NotoSansCuneiform-Regular.ttf \
     NotoSansCypriot-Regular.ttf \
diff --git a/other/FZKTJW.ttf b/other/FZKTJW.ttf
new file mode 100644
index 0000000..7143eff
Binary files /dev/null and b/other/FZKTJW.ttf differ

这一步操作完成,即可增量编译,在out下的system/fonts/目录下会生成新增的字库文件;

单单执行这一步,apk是无法调用到的,还需要执行如下改动:

修改frameworks/base/data/fonts目录内容

diff --git a/data/fonts/fonts.xml b/data/fonts/fonts.xml
index 2a4a7274d87..1ff548ce7eb 100644
--- a/data/fonts/fonts.xml
+++ b/data/fonts/fonts.xml
@@ -59,6 +59,10 @@
     <alias name="sans-serif-condensed-light" to="sans-serif-condensed" weight="300" />
     <alias name="sans-serif-condensed-medium" to="sans-serif-condensed" weight="500" />
 
+    <family name="talkt">
+        <font weight="400" style="normal">FZKTJW.ttf</font>
+    </family>
+
     <family name="serif">
         <font weight="400" style="normal">NotoSerif-Regular.ttf</font>
         <font weight="700" style="normal">NotoSerif-Bold.ttf</font>

在fonts.xml添加自己的字库配置,这样就可以保证app通过name去索引到字库并且调用。

APP侧调用实例如下:

diff --git a/src/com/android/settings/MasterClearConfirm.java b/src/com/android/settings/MasterClearConfirm.java
index a92c8f85c7..d1571a864e 100644
--- a/src/com/android/settings/MasterClearConfirm.java
+++ b/src/com/android/settings/MasterClearConfirm.java
@@ -32,6 +32,8 @@ import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.TextView;
 
+import android.graphics.Typeface;
+
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper;
@@ -173,6 +175,8 @@ public class MasterClearConfirm extends InstrumentedFragment {
                     confirmationMessage.getText()).toString();
             getActivity().setTitle(Utils.createAccessibleSequence(currentTitle, accessibleText));
         }
+
+        confirmationMessage.setTypeface(Typeface.create("talkt", Typeface.NORMAL));
     }
 
     @Override

      我这里是改了Settings里边恢复出厂设置的确认界面的字体,修改完成,增量编译,然后刷机验证即可~~~

      改动不大,主要是找到要改动的点,网上的方案很多,大部分都是针对低版本,好多文件在高版本没有了,没办法参考,自己搞定了,Mark一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值