抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

在正式环境使用了 Jetpack Compose 的一些感慨/坑

背景:在线上包上应用 Jetpack Compose 进行 UI 开发。

影响:部分情况下 AutoSize 对 ComposeView 的不支持问题、在 Compose 的 Activity 中嵌套老旧 View 体系 Fragment 的问题。

解决办法:使用 xml 等原生写法重写相关需求。

详情

几个月前我在接一个功能模块的时候,使用了 Compose 写了顶层 Activity,页面 UI 类似 Viewpager + Fragment 的 Tab 切换,并且头部使用了协调者布局加下拉刷新,也就是 Coordinatorlayout + RefreshLayout 这套,整体页面比较复杂,但是使用 Jetpack Compose 在 tab 切换等方面显得比较简单,又因为是新模块,于是便有了直接用 Compose 这个打算,这是因。

至于果就是,上个迭代需求是对这个模块扩展,说直白点就是再加两个原生的旧 Fragment ,那两个 Fragment 逻辑很复杂也有一些图表,因为无法嵌套进 compose 中,也没有那么多的时间去用 compose 把那些模块重写,就只能考虑折中办法,就是将顶层用 Android 原生 XML 那套重写,然后 tab 下面用 compose 两个界面、原生两个界面,改动看似不大,动手开始,改完才发现我忘了 Coordinatorlayout 那一套逻辑。

但是!!! Compose 1.2.0以前并不支持与原生的Coordinatorlayout 协调,前两天开发者大会才说,正式版现在都没出,于是我表示绝望且痛苦的将之前的逻辑用原生都重写考虑一遍!!!血泪教训!!!

关于开发者大会一些新特性移步:Jetpack Compose 的新功能-谷歌 I/O 2022

其他坑

抛开一些写法或者框架上的不完整,长列表的性能问题应该是目前的最大的坑,此外就是重组问题,需要特别留意无限重组的问题,另外 UI 上是确实不方便预览,预览乃真鸡肋。这种声明式写法是确实舒服,但想用在线上,我建议慎重,如果你对 compose 的原理,手势,绘制等不是那么了解的话。

另外这货的 ComposeView 在与原生嵌套的情况下,Autosize 那套屏幕适配的会有一些莫名其妙的问题,UI 忽大忽小。

所以只建议在纯 Compose 页面使用 Compose

以上。


本站由以下主机服务商提供服务支持:

0条评论

发表评论