Android中新增思源字型/NotoSansCJK/SourceHanSans
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
系統版本:Android 4.2.2_r1
本文主要是在Android中新增思源字型的過程記錄。思源字型是Google和Adobe在2014.07.18釋出的中文字型。
1.獲取思源字型
2.解壓後如下幾個才是思源字型。
- NotoSansHans-Regular.otf 常規
- NotoSansHans-Black.otf 黑體
- NotoSansHans-DemiLight.otf
- NotoSansHans-Medium.otf
- NotoSansHans-Thin.otf
- NotoSansHans-Bold.otf 加粗
- NotoSansHans-Light.otf
注:這裡說下otf,意為opentype和ttf(truetype)是相容的。
3.安裝體驗
由於Android中只使用到常規和加粗體,這裡也只以這兩個做實驗(同時也有容量的考慮),在高PPI(解析度)的螢幕上或許只是感覺到字形變了,在低解析度的螢幕上變的更加清晰了,前後對比:
之前:
之後:
(上傳到這裡就不清晰了,真是怪,點選連結看原圖更為清晰)
1) 將NotoSansHans-Regular.otf NotoSansHans-Bold.otf放到/system/fonts/目錄下。
2) 將如下fallback_fonts.xml放到/vendor/etc/下。
<?xml version="1.0" encoding="utf-8"?>
<!--
Vendor-provided fallback fonts
This file can be edited to add references to fonts that are not installed or referenced in the
default system. The file should then be placed in /vendor/etc/fallback_fonts.xml. Note
that in your makefile, this directory should be referenced as $(TARGET_COPY_OUT_VENDOR)/etc/:
PRODUCT_COPY_FILES += \
frameworks/base/data/fonts/vendor_fonts.xml:$(TARGET_COPY_OUT_VENDOR)/etc/fallback_fonts.xml
For example, vendors might want to build configurations for locales that are
better served by fonts which either handle glyphs not supported in the default fonts or which
handle these glyphs differently than the default fallback fonts.
Each entry in this list is a "family", which consists of a list of "files"
(the filenames for that family). The files objects are
provided in the order of the styles supported for that family: regular, bold, italic, and
bold-italic. Only providing one font means that all styles will be rendered with that font.
Providing two means that these two fonts will render regular and bold fonts (italics will
be mapped to these two fonts).
There is also an optional "order" attribute on the Family tag. This specifies the index at
which that family of fonts should be inserted in the fallback font list, where the
default fallback fonts on the system (in /system/etc/fallback_fonts.xml) start at index 0.
If no 'order' attribute is supplied, that family will be inserted either at the end of the
current fallback list (if no order was supplied for any previous family in this file) or
after the previous family (if there was an order specified previously). Typically, vendors
may want to supply an order for the first family that puts this set of fonts at the appropriate
place in the overall fallback fonts. The order of this list determines which fallback font
will be used to support any glyphs that are not handled by the default system fonts.
Han languages (Chinese, Japanese, and Korean) share a common range of unicode characters;
their ordering in the fallback or vendor files gives priority to the first in the list.
Language-specific ordering can be configured by adding a BCP 47-style "lang" attribute to
a "file" element; fonts matching the language of text being drawn will be prioritised over
all others.
The sample configuration below is an example of how one might provide two families of fonts
that get inserted at the first and second (0 and 1) position in the overall fallback fonts.
See /system/etc/system_fonts.xml and /system/etc/fallback_fonts.xml for more information
and to understand the order in which the default system fonts are loaded and structured for
lookup.
-->
<!-- Sample fallback font additions to the default fallback list. These fonts will be added
to the top two positions of the fallback list, since the first has an order of 0. -->
<familyset>
<family order="0">
<fileset>
<file>NotoSansHans-Regular.otf</file>
<file>NotoSansHans-Bold.otf</file>
</fileset>
</family>
<!-- Italic 等等會造成啟動不了的問題,所以只新增前兩個足矣。
<family>
<fileset>
<file>NotoSansHans-Regular.otf</file>
<file>NotoSansHans-Italic.otf</file>
<file>NotoSansHans-Bolditalic.otf</file>
<file>NotoSansHans-Black.otf</file>
<file>NotoSansHans-DemiLight.otf</file>
<file>NotoSansHans-Light.otf</file>
<file>NotoSansHans-Medium.otf</file>
<file>NotoSansHans-Thin.otf</file>
</fileset>
</family>
-->
</familyset>
同時也有做好的字型檔加xml在這裡下載,還原的時將這三個檔案刪除即可。
4.以原始碼方式新增
如果需要在製作rom時就可以自動新增預設中文字型,思路和上邊的類似,以下是git log資訊。
commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Author: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Date: Mon Aug 18 15:44:24 2014 +0800
Add Noto Sans CJK fonts for Chinese
diff --git a/device/rockchip/rk30sdk/device.mk b/device/rockchip/rk30sdk/device.mk
index 8befd40..b4e2822 100755
--- a/device/rockchip/rk30sdk/device.mk
+++ b/device/rockchip/rk30sdk/device.mk
@@ -119,6 +119,10 @@ PRODUCT_COPY_FILES += \
+#fonts
+PRODUCT_COPY_FILES += \
+ frameworks/base/data/fonts/vendor_fonts.xml:$(TARGET_COPY_OUT_VENDOR)/etc/fallback_fonts.xml
diff --git a/frameworks/base/data/fonts/Android.mk b/frameworks/base/data/fonts/Android.mk
index e02e95a..0b4bc6c 100755
--- a/frameworks/base/data/fonts/Android.mk
+++ b/frameworks/base/data/fonts/Android.mk
@@ -157,6 +157,8 @@ font_src_files += \
DroidSansHebrew-Regular.ttf \
DroidSansHebrew-Bold.ttf \
DroidSansThai.ttf \
+ NotoSansHans-Regular.otf \
+ NotoSansHans-Bold.otf \
DroidSansArmenian.ttf \
DroidSansGeorgian.ttf \
AndroidEmoji.ttf
diff --git a/frameworks/base/data/fonts/NotoSansHans-Bold.otf b/frameworks/base/data/fonts/NotoSansHans-Bold.otf
new file mode 100644
index 0000000..006372e
Binary files /dev/null and b/frameworks/base/data/fonts/NotoSansHans-Bold.otf differ
diff --git a/frameworks/base/data/fonts/NotoSansHans-Regular.otf b/frameworks/base/data/fonts/NotoSansHans-Regular.otf
new file mode 100644
index 0000000..923f89c
Binary files /dev/null and b/frameworks/base/data/fonts/NotoSansHans-Regular.otf differ
diff --git a/frameworks/base/data/fonts/fonts.mk b/frameworks/base/data/fonts/fonts.mk
index 875795a..490c6e6 100755
--- a/frameworks/base/data/fonts/fonts.mk
+++ b/frameworks/base/data/fonts/fonts.mk
@@ -38,6 +38,8 @@ PRODUCT_PACKAGES := \
DroidSansHebrew-Regular.ttf \
DroidSansHebrew-Bold.ttf \
DroidSansThai.ttf \
+ NotoSansHans-Regular.otf \
+ NotoSansHans-Bold.otf \
DroidSerif-Regular.ttf \
DroidSerif-Bold.ttf \
DroidSerif-Italic.ttf \
diff --git a/frameworks/base/data/fonts/vendor_fonts.xml b/frameworks/base/data/fonts/vendor_fonts.xml
index 8690ee1..fba0c88 100755
--- a/frameworks/base/data/fonts/vendor_fonts.xml
+++ b/frameworks/base/data/fonts/vendor_fonts.xml
@@ -45,17 +45,26 @@
<!-- Sample fallback font additions to the default fallback list. These fonts will be added
to the top two positions of the fallback list, since the first has an order of 0. -->
-<!--
<familyset>
<family order="0">
<fileset>
- <file>MyFont.ttf</file>
+ <file>NotoSansHans-Regular.otf</file>
+ <file>NotoSansHans-Bold.otf</file>
</fileset>
</family>
+
+<!-- Italic 等等會造成啟動不了的問題,所以只新增前兩個足矣。
<family>
<fileset>
- <file>MyOtherFont.ttf</file>
+ <file>NotoSansHans-Regular.otf</file>
+ <file>NotoSansHans-Italic.otf</file>
+ <file>NotoSansHans-Bolditalic.otf</file>
+ <file>NotoSansHans-Black.otf</file>
+ <file>NotoSansHans-DemiLight.otf</file>
+ <file>NotoSansHans-Light.otf</file>
+ <file>NotoSansHans-Medium.otf</file>
+ <file>NotoSansHans-Thin.otf</file>
</fileset>
</family>
+-->
</familyset>
---->
需要強調一點,關於字型拷貝,經過測試發現需要同時修改Android.mk和fonts.mk才可以完成拷貝。Google是以Apache License, version 2.0協議釋出的,所以大可不必擔心會有律師函的問題,在高版本的Android中這套字型已經是內建到Android中了。DroidSansFallback.ttf並不是完全指中文字型,由於之前並沒有開發出專心的中文字型,目前處理方法是把所以暫時不規範的字型都放入了DroidSansFallback.ttf中,Fallback是備胎的意思,所有的胎都爆了才會使用這個。
參考:《關於Android的字型》。低版本的Android參考《Android 如何增加新的字型檔》 <完>