最近有闲的时候又将应用的一部分使用 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://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条评论