Ec3391b1d30198890cde962e0e47c819
重学安卓:才不会告诉你,自定义视图我这样学

温馨提示:如果这是第一次接触《重学安卓》,可借助 这份在 GitBook 上维护的 “导读” 来快速了解《重学安卓》专栏、获取它的目录、试读内容,以及了解它的最新动态 和 发展状况。

截至目前,专栏已对 体系化文章 做了 730 余次修订,数十位群友告诉我 受专栏的启发 他们也开启了写作之路。群里不定期会有小伙伴讨论适配问题、分享原创的开源库 和 提供内推机会,订阅后可随时进群交流。

前言

很高兴见到你!

在过去的几个月中,我们分别 深入浅出地复盘了 视图控制器的 生命周期、重建机制、状态管理、页面通信、路由导航,以及作为 标准化开发模式的 Jetpack MVVM 最佳实践

相信经过几个月的实践、反思 和 沉淀,大家对作为 应用开发骨架 的 视图控制 知识点的消化程度,已经跑赢全网 90% 的开发者。😉

本来随后我是想直接开讲自定义视图,但如果像其他网文一样,一上来就介绍细枝末节的技术点,那恐怕会很让人感到沮丧,找不到支点来立足和展开。

更神奇的是,打开视图学习之门的钥匙,并不全在技术领域内。所以,在正式开讲自定义视图的技术知识之前,我决定通过这样一篇短文,来给大家一把视图学习的钥匙。

所以 这篇文章,不仅是本专栏的“仅此一篇”,也是 世界范围内的 仅此一篇。这是首次 也是最后一次 公开我独家的 自定义视图学习方法。关于自定义视图的文章,就算只读这一篇,你也没有白来!

文章目录一览

  • 前言
  • 死记硬背时期 的混沌世界
  • 深度思考眼中 的自定义视图
    • 对现存自定义视图的学习
    • 对视图标准化 API 的学习
  • 综上
  • Note 2020.07.07 加餐:
    • 重学安卓 开源库 内部共享计划
    • 非卖品 · 拓展阅读

死记硬背时期 的混沌世界

记得参加工作刚满 1 年的时候,我也和多数人一样,思维还停留在 学生时代 死记硬背的水平,老想着 大而全、蛇吞象,想把所有东西都整理好、强迫自己记下来。

最初我的策略是,将控件 按覆盖面积 分类,例如 导航类、表单类、展示类、容器类,等等。然后不断地收集关于它们的第三方库、Google 自家控件的知识点等等。

一开始是有一点效果,知道控件怎么用,但也就到这种程度为止,过一段时间,便通通遗忘。

更糟糕的是,这种 不科学的管理方式,使得对控件的管理逐渐失控,每当有新的控件被我相中时,我却不知道将其归类到哪个目录下为好。

我相信很多人都有过这样的经历,最开始十分努力,后来不了了之

有的人从此开启了咸鱼模式,反正这也学不好,那也学不好,干脆得过且过、混吃等死。另有的人则是加倍努力,然后背下来的知识,也加倍地忘记 …🙄

那么有多少人真的反思过,是不是自己的思考方式出了问题呢

由于时间过去了太久,我不想展开介绍 从死记硬背 到深度思考,这期间我究竟经历了些什么,乃至于有了这样的领悟。但正如你们看到的,前面几期关于视图控制和 MVVM 深入浅出的介绍,都是来自深度思考的结果。

深度思考 不一定能带来 绝对正确的结论,但却一定是自恰的、能让自己信服从而义无反顾地行动

深度思考的精髓就在于 探究为什么、探究事物存在的缘由。凡事把这个想明白,就能透过现象抓住本质。(详见 《重学安卓 基本功:是随时随地可受用的 深度思考秘诀》 对深度思考方法论的解析)

深度思考眼中的自定义视图

所以,在形成了深度思考的习惯后,我对视图的学习,也发生了翻天覆地的变化。

不再是一上来就 死记硬背是什么 和 练习怎么用。

而是首先思考,自定义视图 为什么存在?(凡是 View 的实现类,都算自定义视图,不要觉得 Google 默认实现的就不算、只有自己实现的才算)

视图的存在,对用户来说,是为了满足 所见即所得 的人机交互需求;对开发者来说,是为了能够定制视图 来提供合适的用户体验。

换言之,

若不是为了满足用户 对 所见即所得 的需求,视图根本不需要存在,给个黑底白字的命令行就行了。

若不是为了让开发者 能够定制视图 来提供合适的用户体验,视图也不需要通过 模版方法模式 和 组合模式 来 设计出标准化的 API、供开发者定制、并且由 统一的视图管理机制 在后台运筹帷幄

所以至此,我们发掘并确立了视图的两大学习方向:

1.对现存自定义视图的学习

top Created with Sketch.