zoukankan      html  css  js  c++  java
  • Android中加入思源字体/NotoSansCJK/SourceHanSans

    系统版本号:Android 4.2.2_r1

    本文主要是在Android中加入思源字体的过程记录。

    思源字体是Google和Adobe在2014.07.18公布的中文字体。

    1.获取思源字体(Google:Noto Sans CJK; Adobe:Source Han Sans)

    2.解压后例如以下几个才是思源字体。

    •  NotoSansHans-Regular.otf    常规
    •  NotoSansHans-Black.otf      黑体
    •  NotoSansHans-DemiLight.otf  
    •  NotoSansHans-Medium.otf 
    •  NotoSansHans-Thin.otf 
    •  NotoSansHans-Bold.otf        
    •  NotoSansHans-Light.otf

    注:这里说下otf,意为opentypettf(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.mkfonts.mk才干够完毕拷贝。Google是以Apache License, version 2.0协议公布的,所以大可不必操心会有律师函的问题,在高版本号的Android中这套字体已经是内置到Android中了。DroidSansFallback.ttf并非全然指中文字体,因为之前并没有开发出专心的中文字体,眼下处理方法是把所以临时不规范的字体都放入了DroidSansFallback.ttf中,Fallback是备胎的意思。全部的胎都爆了才会使用这个。

    參考:《关于Android的字体》。低版本号的Android參考《Android 怎样添加新的字库》 <>

  • 相关阅读:
    CArray类模板封装示例
    环形队列CQueue类模板示例
    CStack栈模板封装示例
    TSIC506驱动程序
    proteus虚拟串口实现
    js学习笔记(一)
    提升网页性能
    JS性能优化笔记搜索整理
    @font-face制作Web Icon
    原生js动画效果(源码解析)
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7003012.html
Copyright © 2011-2022 走看看