最近断断续续写了一系列关于修改App字体的文章。到目前为止,我已经写了九篇文章。这几乎是对我认为与字体有关的内容的清晰解释。至此,应该就结束了。花费如此多的精力和篇幅来讲解Android替换字体的所有细节,相信在Android技术圈内再也没有字体相关的文章可以超越它了。当然,我不是说它有多好,技术有多深。只是修改字体和改字体的知识点实在是太多了。本系列文章涵盖了修改字体所涉及的所有内容。如果再花精力和时间重写一遍,就很难有实质性的改进。时间和精力的成本收益不平衡,意义不大。当然,如果不排除出现更多颠覆性的技术,那就另当别论了。不过我今天要说的不是这个系列结束后的感言。我真正想说的是,你真的看懂了这个系列的文章吗?从开始写这个系列文章开始,群里或者评论里就出现了一些声音。有人说谷歌在Supportv26中发布了Fontinxml解决方案;有人说已经有成熟的开源项目了,你说的没有意义。一开始我会说,哦,这个我以后再写,后来就渐渐忽略了。但是,真的没有意义吗?技术总是在迭代更新,每天都有新的技术问世。作为一个技术人,如果只是一味的追着怎么用这些新技术,什么时候能出头?如果你想在这个行业一直走下去,真正需要做的是建立自己的技术知识体系,把学到的新技术、核心技术和概念抽象出来,形成自己的技术闭环,固化在你的意识。经验,横向辐射到其他技术点。当然,这有点神秘。我们真正需要关心的是这些技术的核心点,它的精髓在哪里,为什么要这样设计,这样的实现方式有哪些不足之处。只有把技术抽象出来,透过表象看本质,才能应用到其他技术上。当然,没有五年以上的经验是很难达到这样的境界的。知其所以然不难,知其所以然也难,知一物为何如此,便可知百物为何如此。我写了这些文章,你看了就可以下结论了,但是这些技术的获取、证明、推导、验证的思维路径才是我想让你更了解的。Google刚刚在GoogleI/O大会上宣布Kotlin是Android的主要开发语言,很多人都花了不少心思去学习它。但我见过有人花了半天时间阅读了Kotlin的文档和一些关键点,然后花了两周的时间从头开始写了一个完整的应用程序。现在上架了,广告收入还不错。这些都是掌握了核心技术的人。不管技术怎么发展,只要还在这个行业,就不会被淘汰,因为他们有自己的技术体系,很多东西即使没接触过也能分析出来。大概原理。而这些才是真正想走技术道路的技术人真正需要培养的技能。回顾本字体系列的文章,你能从中看到什么?其实整个系列主要分为四个部分。1.了解修改字体相关的基础知识。1.Android修改字体,详细概览。2.修改字体需要的Typeface。这两篇文章主要讲解了修改字体需要用到的一些属性,以及系统默认字体的细节,加载自定义字体需要用到的Typeface类的源码细节。当你决定需要使用一个解决方案来实现某个功能时,你需要提前知道这个解决方案以及涉及的所有细节,以免以后给自己埋坑。不能说是用一个Api,非常好用,调用setXxx()就可以实现。如果你在这里完成了,你将永远是一个初学者。至少你需要知道setXxx()方法在内部做了什么?线程安全吗?使用时有什么需要注意的情况吗?这些细节只能通过阅读源代码才能找到。2.一些能解决问题但不完美的方案3.一种粗暴的替换全局字体的方法。4、通过反射,修改Typeface,替换全局字体。这两篇文章讲了一些不太优雅的解决方案,比如全局替换自定义控件,onCreate()时遍历ViewTree,通过反射修改一个Typeface的默认字体,然后根据主题设置修改全局字体。这些,其实最后都不会用在商业项目中。除了不优雅之外,限制和效率问题都是商业项目需要考虑的,但不妨碍我们理解这些方法。修改字体的功能其实有更好的解决方案,但不排除有其他需求,暂时找不到其他更好的解决方案。那么,这个时候能解决问题的方案就是好的方案。需要解决的是让这些不好的方案不要产生这么大的影响。3.低成本快速替换控件5.使用AppCompatDelegate全局替换字体。6.修改LayoutInflater,全局修改字体。7.通过自定义属性低成本添加多种字体。事实上,到头来你会发现,最终的问题是如何以低成本快速优雅地替换控件,或者统一给控件添加字体信息。而这些解决方案,如果你横向辐射,你会发现它不仅适用于更换字体。控件的全局替换并不意味着要手动一个一个的修改布局文件。AppCompatDelegate或LayoutInflater也可以用于全局快速替换它们。自定义属性不仅在自定义控件时可用。这些概念可以用在任何需要替换控件的地方。比如:换皮,无埋点统计,这些都有。如果单纯的把它当做替换字体的解决方案,那么它只能替换字体。4.其他新的或成熟的解决方案8.AndroidOreo的可下载字体。9.使用成熟的开源库替换全局字体。支持v26新增的可下载字体也是一个不错的解决方案。但是,在商业项目中,升级这些库的版本是明智的。而使用成熟的开源库也是一个很好的解决方案。开源的库,用起来很爽,直接引入,根据文档改一个关键点,功能就可以实现了。但只要是解决方案,就会有局限性。当你使用它的时候,你必须了解它的所有细节,知道它的核心原理是什么?技术盲点在哪里?如果你最终选择了一个开源库来替换字体,如果你看过之前的文章,你会发现这个开源库其实只是对之前文章介绍的技术点的一种不同的使用方式。您可以放心使用它,并知道问题可能出在哪里。问题,如何快速解决。有很多成熟的开源库,但是如果你还只是停留在使用,当你再出去面试的时候,面试官问你为什么选择它?它的核心原理是什么?还有其他选择吗?你怎么回答?是因为大家都在用吗?这些都是你核心竞争力的体现。***,我想说,技术之路漫漫,可行可珍惜。不要只停留在表面,对技术原理抽象理解,固化在自己的意识中,形成自己的技术回路。只有这样,才能保持体验的价值,才能在这个科技大爆发的时代不畏惧变化。结论固然重要,但这些技术的获取、证明、推导、验证的思维路径才是我更想让大家了解的。【本文为专栏作家“张扬”原创稿件,转载请微信♂联系作者获得授权】点此查看作者更多好文
