缘起

正如知乎上“梁海”所说,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/

问问题的妙用

记得看《你的灯亮着吗?》这本书时就感觉通过提问的方式比陈述、祈使效果都好很多。原书说的是这么一个场景,就是说日内瓦湖景区的上山隧道。进隧道通常都需要开大灯,可出隧道时司机们往往忘记关大灯,而搞得游完景区后车上的电已经耗尽,只得拖车或让警察来帮助发动。后来就出了几个版本的提示语:1. **请关灯...… Continue reading

时间管理中的断舍离

Published on May 20, 2018

科學の上網的便捷方法

Published on February 03, 2018