Android App更换字体调研

2020-05-12  本文已影响0人  cover_tech

最近各大项目都要换字体,所以调研了一下

首先,是换字体的方法:
如果是TextView的话,一个是style中的fontFamily,一个是Typeface
如果是EditText的话,仅有style中的fontFamily
如果是WebView的话,上述两个都无效,仅有嵌入css替换字体的方案

然后,是具体的替换方式,还是以上述三个分布来看:

  1. style中设置fontFamliy
    • 先来了解下Android原生使用的字体,思源黑体(san),思源宋体(serif),其实还有两个,一共四个,但是这两个足够满足绝大部分的需求了。不得不说下的华为,由于某些众所周知的原因,华为取消了默认字体,所以设置这两个是无效的,当前测试的情况是,华为仅数字字母生效,其他不生效,这个其实是Android自己的逻辑,字体没有的话,使用系统默认的字体。使用方法就是将<item name="fontFamily">serif</item>这行加在App使用的Theme里面。
    • 然后是自定义字体,将字体文件放在res目录下的font里面,然后建立xml,按语法写好就好了。调用方式就是<item name="fontFamily”>@font/your_font</item>
  2. Typeface
    • 从font中取数据,设置给TextView.Typeface就好。下述方法能相应取到Typeface ResourcesCompat.getFont(context!!, R.font.your_font)
    • 从asset中取数据,设置给TextView.Typeface就好。下述方法能相应取到Typeface Typeface.createFromAsset(context.getAssets(), your_path)
  3. 嵌入CSS
    • 熟悉HTML和CSS的同学应该很清楚怎么换,就是在HTML中嵌入CSS来加载自定义字体。基于Android本身的情况,字体和CSS文件均需要放在assets里面,然后在HTML代码中插入<link />链接给HTML代码即可
    • 这个方法是有一定问题的,需要先把字体价值进内存,然后再渲染给网页,所以会闪白一下,暂无好的解决方法

最后,是1,2两个方法的限制,3的限制已经写了

fontFamilyTypeface是冲突的,即在Style中设置了字体,一旦TextView重新设置了Typeface,就会以新设置的Typeface为准。举例:fontFamily设置了思源宋体,Typeface设置了Typeface.BOLD,这时,显示的样式是默认字体的加粗,而不是宋体加粗,如果需要使用宋体加粗,需要在设置Typeface为另一自定义的加粗宋体的字体。

本文作者:刘小宇(Laffey)

本文为原创作品,未经允许不得转载。

上一篇 下一篇

猜你喜欢

热点阅读