关于这篇文章,其实本来并没有什么写作计划。触发它诞生的事情是,今天早上,QQ空间给我推了这样一条消息:
一年前的今天,我敲下了第一行的Hello Android for Jetpack Compose
,而到今天,我的个人小项目 译站 早已全面转向 Jetpack Compose 。关于 Compose,我也写了几个简易的开源库、作了几篇小文章。所以今天,不妨来谈谈我接触 Compose 的这一年。
本文 不是技术文 ,其中观点仅代表我个人。受限于本人技术水平,难免有误,还望您包容谅解
我接触 Compose 的时间应该还算较早,虽然不是最早的一批,但也算是那时的少数(至少我以为)。彼时,Google 发布 beta 版本,尚且只有 AS
的 Beta
版本支持。为了体验,我将一直使用的AS Stable
切成了AS Beta
,用默认模板敲出了第一行代码。
我是一个对新技术很感兴趣的人,这可能也是我去学习 Compose 的原因。声明式UI的概念虽然相较View
很新奇,但鉴于我接触过Vue
和Flutter
,所以也还能上手。
上手是可以上手,但奈何资料确实不多,尤其是中文的。对我来说,早期学习 Compose 的资料基本主要来自Google官网
和 Youtube
。看着英文资料和视频,我逐渐学会了使用Row
和Column
,学会了要remember
,学会了几种副作用的使用,学会了animate*AsState
和 animateVisibility
……这段过程中,Youtuber Philipp Lackner 的 Creating Your First Jetpack Compose App 系列对我帮助很大,在此也遥远的表示感谢。
于是,在漫不经心地刷了些视频和文档后,我对 Compose 有了个大体的认识。于是我也想为中文资料做点力所能及的贡献,于是参考这个视频和当时的官方教程,写了第一篇关于Compose
的文章
录了三个之后我鸽了,好吧,这视频的质量实在是不咋滴。没得设备和技术,而且录视频也是个技术活。但是既然学了,肯定要用啊。于是,我把目光转向了我自己的小项目,译站。
它是我2020年初写的一款简单的翻译小应用,最早是用View
实现的。秉持着以用代学的想法,我开始了对这个应用的Compose
化。
到九月份,我基本实现了它的主页面。
(忽略这粗犷的 commit ……)
其实这里要说明的是,Compose 的迁移其实并没那么困难。Android 官方提供了非常棒的工具,允许你在View
项目中部分使用Compose
、或者在Compose
中部分使用View
。如果你原先的架构合理,View
和Model
没有非常强的耦合,那么其实改造起来很容易。LiveData
或者Flow
都可以通过.observeAsState
一键转换成可以在 Compose 中使用的 State(Compose 的 UI 由 State 驱动)。我这里之所以花了那么久,有两个原因:
Github
,这也比较花时间。总之,在各种折腾下,译站的 Compose 版本也逐渐重构完成了,并在那之后均用(准确来说除了悬浮窗和CodeView) Compose 完成各种 UI 效果。
其实对我个人来说,开始学习 Compose 的时候有一个很困惑的点:不知道学完基础之后该学啥了。一方面是资料确实不多,而且视频教程也都是围绕着基本控件之类的来讲;二是我自己没有很大的东西去细究 Compose 的实现。于是三天打鱼两天晒网的,在不断更新应用的间隙间,也偶尔地学习一些新东西。
这里很感谢的一份资料是 RugerMc 大佬牵头做的 jetpack-compose-book: Jetpack Compose 基础教程,持续更新 ,很详细的介绍了 Compose 各个方面的使用。对于现在卖课混杂、培训遍地、营销漫天的中文互联网社区环境来说,这样无私的技术分享、开源布道的精神真是说得上不多见了。我自己也为这个项目提了绵薄的几个PR。互联网技术的精神应当在于包容、共享、探索、钻研,至少我是这样觉得的。
这段时间,不少大佬们的博客也在惊艳着我,比如程序员江同学、fundroid、Petterp、路很长OoO等,在我学习 Compose 的路上,他们的文章给了我很大帮助,再次均表示感谢。
对我来说,尽管我是一个很懒的人,但我还是也尝试着写起了 Compose 相关的文章。一是助于自己提升,二是为中文资料做点绵薄贡献。一点点,到现在我也已经写了13篇关于 Compose 的文章了。或许不足为道,但若是有人看到,说,这个不错,对我有帮助,那便足够了。
其中我自己觉得比较好玩的是 Jetpack Compose 自定义布局+物理引擎 = ? 这一篇。在那里,我用 Compose 自定义布局实现了这样的效果
没有用,但很有趣。这个想法出现在我高三的时候,但是一直觉得会很难就一直不想做,直到前几天下定决心做了做。在巨人的肩膀上,花了两天就实现了。感觉也蛮有成就感的。如果您感兴趣,可以在Github查看完整源代码
说点正题的话,就我个人而言,我觉得 Compose 开发有以下优劣:
优
(通过 LocalXXX 和 rememberXXX 获取和操作各种东西,动画、软键盘、状态栏…… )
但就目前来说,也有些问题
阅读量:1588
点赞量:0
收藏量:0