缘起

正如知乎上“梁海”所说,Android也就使用的fallback方案。毕竟就算支持所有Unicode文字的字体存在,也不能保证每个字体的美观及后续维护。而且计算机上目前单字体文件也有字数上限65535$(2^{16})$。

言归正传,Android上首先会默认使用系统配置字体(/system/etc/system_fonts.xml)。当系统配置的字体无法解析一些字后就会使用fallback list(默认/system/etc/fallback_fonts.xml)中的字体,并且按照顺序依次地使用相应的字体解码显示。具体操作步骤如后:

资料准备

  1. Root 并装上RE文件管理器

  2. 准备Android上使用的字体,下载解压,使用RE文件管理器将需要的字体(这个压缩包是包含近90个字体,30+ scripts,200+ languages,可参考此处找到对应字体)拷贝至手机的/system/fonts下。并长按字体文件,弹出操作项后,将权限改成对所有人可读 ,同时所有者和群组都改成root。img1

字体配置修改

  1. 可以直接使用RE文件管理器修改/system/etc/fallback_fonts.xml中的配置。如后添加所需字体的配置(这里添加了中国及南亚等字体,因为Android默认是支持显示阿拉伯语和梵文的,也就没有将对应的字体加到下面配置里)。并且需要置于DroidSansFallback.ttf的配置前,不然将不能正常显示排在DroidSansFallback.ttf之后的字体。
    <family>
        <fileset>
        <file>NotoSansMyanmar-Regular.ttf</file>
        </fileset>
    </family>
    <family>
        <fileset>
        <file>NotoSansMongolian-Regular.ttf</file>
        </fileset>
    </family>
    <family>
        <fileset>
        <file>NotoSansYi-Regular.ttf</file>
        </fileset>
    </family>
    <family>
        <fileset>
        <file>Qomolangma-UchenSarchung.ttf</file>
        </fileset>
    </family>
    <family>
        <fileset>
        <file>NotoSansKhmer-Regular.ttf</file>
        </fileset>
    </family>
    <family>
        <fileset>
        <file>MiaoUnicode-Regular.ttf</file>
        </fileset>
    </family>
   
  1. 或者使用这个配置文件,并拷贝merge到/system/vendor/etc/fallback_fonts.xml中。 其内容如后。 其中第一个family加了order=0(计算机中的1),意思就是最后的fallback list,先由/system/etc/fallback_fonts.xml顺序生成,然后将/system/vendor/etc/fallback_fonts.xml中所有的fonts, 从fallback list中的第1个位置插入。 order也可以改成其他数字,但要保证插入DroidSansFallback.ttf所在位置的之前。
   <?xml version="1.0" encoding="utf-8"?>
   <familyset>
   <family order="0">
       <fileset>
       <file>NotoSans-Regular.ttf</file>
       </fileset>
   </family>
   <family>
       <fileset>
       <file>NotoSansMyanmar-Regular.ttf</file>
       </fileset>
   </family>
   <family>
       <fileset>
       <file>NotoSansMongolian-Regular.ttf</file>
       </fileset>
   </family>
   <family>
       <fileset>
       <file>NotoSansYi-Regular.ttf</file>
       </fileset>
   </family>
   <family>
       <fileset>
       <file>Qomolangma-UchenSarchung.ttf</file>
       </fileset>
   </family>
   <family>
       <fileset>
       <file>NotoSansKhmer-Regular.ttf</file>
       </fileset>
   </family>
   <family>
       <fileset>
       <file>MiaoUnicode-Regular.ttf</file>
       </fileset>
   </family>
   </familyset>
   

使用与测试

  1. 安装相应输入法
  2. 最后测试一下手机能否正常显示相关的字吧

國際音標tɕi̯ᴀ˥˥ 維吾爾 ئۇيغۇرچە 藏བོད་སྐད། 緬မြန် 彝ꑳ 滿ᠰᠠᡳᠨᠮᠤᠩᠭᠤᠯ 泰ไทย 梵संस्कृत 希臘ἄ Punjabi ਪੰਜਾਬੀ پنجابى Arabic العربية Telugu తెలుగు Sundanese ᮘᮞ ᮞᮥᮔ᮪ᮓ Oriya ଓଡ଼ିଆ Khmer ភាសាខ្មែរ Canadian Aboriginal Syllabics ᓀᐦᐃᔭᐍᐏᐣ Cherokee ᎠᏂᏴᏫᏯ Coptic ⲙⲛⲧⲣⲙⲛⲕⲏⲙⲉ Deseret 𐐔𐐯𐑅𐐨𐑉𐐯𐐻 𐐈𐑊𐑁𐐩𐐺𐐯𐐻 Ethiopic ኢትዮጵያ Old Persian cuneiform 𐎣𐎲𐎢𐎪𐎡𐎹 Balinese ᬩᬮᬶ᭞᭑᭞ᬚᬸᬮᬶ᭞᭑᭙᭘᭒᭟ Javanese ꧋ꦱꦸꦒꦼꦁꦫꦮꦸꦃꦮꦺꦴꦤ꧀ꦠꦼꦤ꧀ꦲꦶꦁꦮꦶꦏꦶꦥꦺꦝꦶꦪꦃꦗꦮꦶ꧉

img2

字体使用情况

Original post: http://blog.josephjctang.com/2014-11/ethic-scripts/

2016 記

2015 年做的和沒做的,也大體記錄在了[這裏]({% post_url 2016-01-01-annual-review-and-planning %})。匆匆一年已逝,幾多慨嘆,幾多欣喜。後面列列過去已經做的,以及相對的未來一年的TODO list。主要也是從工作上的個人提升,以及生活上的...… Continue reading

《神经网络》课程笔记

Published on November 06, 2016

搜索广告机制设计

Published on November 02, 2016