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

伪斜杠青年

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

尝试将应用使用 Jetpack Compose 重构后遇到的一些问题

最近有闲的时候又将应用的一部分使用 Jetpack Compose 进行了重构,目前的 Jetpack Compose 也支持到了 kotlin 1.6.10 ,总体来说简单布局基本能替代了,但就大部分情况下没有简单直接的解决方案,还是需要自定义。

文字选择问题

对于原生 TextView 来说,文字选择是很简单的一件事,只需要设置 Selectable 属性,就能在用户长按文字时弹出系统所提供的 “搜索” “复制”等功能的 ContextMenu,能满足大多数情况下的使用,但 Compose 版本的这种实现:

@Composable
fun SelectableText() {
    SelectionContainer {
        Text("This text is selectable")
    }
}

有且仅有 “复制” 这一个选项,我能理解的只有,这个复制选项是 Compose 自行实现的,而非系统提供的 ContextMenu!

文字换行问题

对于 Android TextView 的文字换行大多数人实际上都不满意,但能用的解决方案也不是没有,就是 breakStrategy,而在 Compose 中目前还找不到类似该项属性的东西。

至少我没在官方文档中看到:https://developer.android.google.cn/jetpack/compose/text?hl=zh-cn#select-text

Popup Window 问题

就目前而言,Compose 不支持在 Popup Window 中使用 setContent 方式实现,会报错:

    java.lang.IllegalStateException: ViewTreeLifecycleOwner not found from android.widget.PopupWindow$PopupDecorView{9dfea2f V.E...... R.....I. 0,0-0,0}

经过一些查找发现确实是不支持,网上推荐使用替代是 DropdownMenu,但这是来自 material :

https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary#DropdownMenuItem(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.interaction.MutableInteractionSource,kotlin.Function1)

官方文档看不到的话可以看:

https://foso.github.io/Jetpack-Compose-Playground/material/dropdownmenu/

多类型网格列表问题

就目前来说,没有什么合适的多类型网格布局解决方案,因为目前的列表就一个 LazyColum(实验性),StickyHeader粘性头部(实验性),具体可以看官方文档:

https://developer.android.google.cn/jetpack/compose/lists?hl=zh-cn#grids

IDE 支持问题

就目前最新的 Android Studio 的代码提示来看,第一是提示慢,第二是部分属性无法提示,比如 Text 的 textAlign 。

不过,即便现在很多还有残缺,但在自定义 View 以及手势操作上倒是没什么问题,组内成员也都在使用 Jetpack Compose 进行业务开发,不用创建 xml ,用写代码的方式写 UI ,还是比较爽的。就比如:

if(bool) list.visibility = View.GONE else empty.visibility = View.VISIBLE

用 Compose 就是:

if(bool) ListView() else EmptyView()

无法在 Java 中使用

也是经过了一些尝试,直到看到这篇:

Can I write Jetpack Compose components in Java?

总的来说,无法直接在 Java 中使用 Compose ,但解决办法也是有的,就是使用 AbstractComposeView,接着再将其写在 xml 中当一个 view 使用即可。

这部分具体内容请直接转到官方文档查看:

https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/AbstractComposeView

感受

用起来还是很爽的,多用一用就能感受到那种快乐了,未来可期~


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

0条评论

发表评论