zoukankan      html  css  js  c++  java
  • 看完九篇字体系列的文章,你还觉得我是在说字体?

    top

    关注过我的公众号一段时间的朋友,都应该知道,最近一段时间,断断续续的一直在写一个关于修改 App 字体的系列文章,到现在已经写了九篇了,差不多算是将我觉得和字体有关的内容,都讲解清楚了,到现在,应该算是完结了。

    花这么大的精力和篇幅,用来讲解 Android 替换字体的所有细节,我相信之后的 Android 技术圈应该不会再有字体相关的文章能超过它了。

    当然,我这里并不是说它有多好技术有多深,只是修改字体还改的知识点就这么多,而这个系列的文章已经涵盖了修改字体所涉及到的所有内容,再花精力和时间来重写一遍,也很难有本质上的提高,时间和精力的成本收益不均衡,意义并不大。当然,不排除有更颠覆的技术出现,就另当别论了。

    不过今天要聊的,并不是本系列完结后的感言,我真正想说的是,你真的看懂本系列的文章了吗?

    从开始写这个系列的文章开始,就一直有一些声音在群里或者评论里。有人说,Google 已经在 Support v26 中,发布了 Font in xml 的方案了;有人说,已经有成熟的开源项目了,你说这些都没有意义。最开始我会说,哦,这个之后会写到,之后慢慢的也不再理会了。

    sikao

    但是,真的是没有意义的吗?

    技术是一直在迭代更新的,每天都有新的技术在面世,作为技术人,如果只是一味的追逐这些新鲜的技术如何使用,何时是个头?

    如果你想在这个行业一直走下去,你真正需要做的是建立自己的技术知识体系,将你学到的新技术,核心技术和概念抽象出来,形成自己的技术回路,固化在意识中,能将这些经验,横向辐射到其它的技术点上。当然,说这些有点玄奥。

    而我们真正需要关心的是这些技术的核心点,它的精髓在哪里,为什么会这么设计,这样的实现到底有缺点在哪里。将技术抽象出来,透过表象看本质,你才能适用在其他技术上。当然,这样境界,通常没有五年以上的经验,很难做到。

    知其然不难,还要知其所以然,知一件事所以然,可知百件事所以然。我写这些文章,你看过可以让你得到结论,但是获取、证明、推导、验证这些技术的思维路径,是我更想让你知道的事情。

    Google 刚在 Google I/O 大会上宣布 Kotlin 之后为 Android 的主要开发语言,很多人花大力气学它。但是我见过有人,花了小半天看了 Kotlin 的文档和一些关键点,之后用了两周从零写了个完整的 App 出来,现在已经上架,广告收入还不错。这些才是掌握了核心技术的人,任由技术如何发展,只要他们还在这个行业内,他们是不会被淘汰的,因为他们有自己的技术体系,很多东西哪怕没接触过也能分析出大概的原理。而这些,才是真正想走技术路的技术人,真正需要培养的能力。

    再来反观本字体系列的文章,透过他们你能看到什么?其实整体的系列,主要就是分四部分。

    一、了解修改字体相关的基本知识。

    1、Android 修改字体,细节概述。

    2、修改字体所需要的 Typeface。

    这两篇文章,主要讲解了修改字体你需要用到的一些属性,还有系统默认字体的细节,以及加载自定义字体需要用到的 Typeface 这个类的源码细节。

    当你决定需要用一个方案去实现某个功能的时候,你提前需要了解到这个方案,所涉及到的所有的细节,这样避免给今后的自己埋坑。

    不能说用到一个 Api,挺好用,调用 setXxx() 就可以实现。如果你到这里就完了,那永远只能是个初级。

    最少你需要知道 setXxx() 方法内部到底干了什么?线程是否安全?使用的时候有没有什么需要注意的情况?这些细节,只能通过读源码来找到答案。

    二、一些可以解决问题但不完美的方案

    3、粗暴的方式,替换全局字体。

    4、通过反射,修改 Typeface,替换全局字体。

    这两篇文章,讲了一些不优雅的方案,例如全局替换自定义控件,在 onCreate() 的时候遍历 ViewTree ,以及通过反射去修改 Typeface 的某个默认字体,然后配合主题的设置去修改全局字体。

    这些,其实最终都不会被用在商业项目上,除了不优雅,局限性和效率问题,都是商业项目需要考虑的,但是并不阻碍我们了解这些方法。

    修改字体这个功能,实际上是有更好的解决方案的,但是并不排除有其他的需求,暂时找不到别的更好的方案。那么,这个时候能解决问题的方案,就是好方案,需要解决的是让这些不好的方案,影响不要那么大。

    naozi

    三、低成本快速的替换控件

    5、利用 AppCompatDelegate ,全局替换字体。

    6、修改 LayoutInflater,全局修改字体。

    7、通过自定义属性,低成本添加多个字体。

    其实到最后,你就会发现,最终的问题在于,如何低成本、快速优雅的替换掉控件,或者统一的为控件附加字体信息。

    而这些方案,你横向辐射一下,你会发现,它不仅仅适用于替换字体。全局替换控件,并不是要手动一个布局文件一个布局文件的去修改,用 AppCompatDelegate 或者 LayoutInflater 也能快速全局替换。自定义属性并不是只有在自定义控件的时候才可以用上。

    而这些概念,所有需要替换控件的地方,都可以使用。例如:换肤、无埋点统计,这些都是可以用到的。如果你单纯的把它当成一个替换字体的解决方案,那它也只能替换字体。

    四、其他新的或者成熟的方案

    8、Android Oreo 可下载字体。

    9、利用成熟开源库,替换全局字体。

    Support v26 新增加的可下载字体,也是一个不错的解决方案。但是在商业项目上,对这些库的版本升级,都是谨慎的。而使用成熟的开源库,也是一个不错的方案。

    开源库,用的时候非常的爽,引入进来,按文档改个关键点,就可以实现功能。但是只要是解决方案,都会有局限性,你在使用它的时候一定要了解清楚它的所有细节,知道它的核心原理是什么?技术盲点在哪里?

    如果你最终选择了开源库来替换字体,如果你看了之前的文章,你会发现实际上这个开源库也只是前面几篇文章中,介绍的技术点的一个不同的使用方式,你用起来就可以比较放心,知道出了问题大概是哪里的问题,如何快速解决。

    成熟的开源库很多,但是如果你还是只停留在使用上,你再次出去面试的时候,面试官问你为什么选择它?它的核心原理是什么?有没有别的替代方案?你怎么回答?难道说因为大家都用吗?

    这些就是你核心竞争力的体现。

    最后,我想说,技术路漫漫,且行且珍惜。

    不要只是流于表面,将技术原理抽象理解,固化在自己意识中,形成自己的技术回路。这样你才能在这个技术大爆炸的时代,你的经验才能保值,无惧变化。

    结论固然重要,但是获取、证明、推导、验证这些技术的思维路径,是我更想让你知道的事情。

    今天在承香墨影公众号的后台,回复『成长』。我会送你一些我整理的学习资料,包含:Android反编译、算法、数据结构、Web项目源码。

    iOS 长按打赏

    推荐阅读:

    点赞或者分享吧~

  • 相关阅读:
    python 将png图片格式转换生成gif动画
    JetBrains系IDE的设置Pycharm PHPStorm
    Nginx 静态页面POST 请求提示405 Not Allowed
    安装SSL证书 and 根域名跳转www域名
    Linux 安装qt5-designer并集成到Pycharm
    Deepin 自动挂载win NTFS磁盘
    Nginx+DNS负载均衡实现
    swoole websocket服务推送
    Linux版 php5.4 升级php7
    百度 Javascript开发 API
  • 原文地址:https://www.cnblogs.com/plokmju/p/7722887.html
Copyright © 2011-2022 走看看