android - 用于文本选择的浮动工具栏 Jetpack Compose
问题描述
如何为 Jetpack Compose 中的 TextField 自定义所选文本的菜单?我的意思是这样的:
在官方文档或 Internet 上没有找到有关如何使用 Jetpack Compose 执行此操作的任何内容。
解决方案
您可以TextToolbar
在LocalTextToolbar
. 在那里,在showMenu
方法中,您必须startActionMode
像在旧 Android 中所做的那样。
CustomTextToolbar
:
typealias ActionCallback = () -> Unit
class CustomTextToolbar(private val view: View) : TextToolbar {
override fun hide() {
println("hide")
}
override val status: TextToolbarStatus = TextToolbarStatus.Hidden
override fun showMenu(
rect: Rect,
onCopyRequested: ActionCallback?,
onPasteRequested: ActionCallback?,
onCutRequested: ActionCallback?,
onSelectAllRequested: ActionCallback?
) {
println("showMenu")
view.startActionMode(TextActionModeCallback())
}
}
class TextActionModeCallback(
) : ActionMode.Callback {
override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
println("onActionItemClicked $mode $item")
return true
}
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
println("onActionItemClicked $mode $menu")
return false
}
override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
println("onActionItemClicked $mode $menu")
return true
}
override fun onDestroyActionMode(mode: ActionMode?) {
println("onActionItemClicked $mode")
}
}
作为参考如何实现它,请查看编写源代码:AndroidTextToolbar和TextActionModeCallback
然后你可以像这样使用它:
CompositionLocalProvider(
LocalTextToolbar provides CustomTextToolbar(LocalView.current)
) {
var text by remember { mutableStateOf("") }
TextField(value = text, onValueChange = { text = it })
}
要使这项工作适用于整个应用程序,您需要在可组合树的顶部执行此操作,例如在setContent
.
ps 我必须定义ActionCallback
,因为它是 compose 内部的。我相信这是一个错误,所以我创建了这个问题
推荐阅读
- python - 如何使用 Python 通过 Firebase 通过 Lambda 发送推送通知
- c# - 如何转换 System.Collections.Generics.IENumerable
串起来 - java - 为什么 Spring Security 在使用 ajax 请求时无法匹配登录请求?
- oracle - 运行时 plsql 抛出表不存在错误
- shell - AWK:读取文件“x”并将其值与文件“y”的第 1 列和第 2 列的值进行比较
- android - 如何将 App Secret 集成到您的 Adjust SDK 中?
- javascript - 如何使用 jQuery 将动态密钥对值发送到 PHP?
- python - jupyter笔记本内存关机
- python - 熊猫不能对数据框求和
- node.js - 在猫鼬 node.js 中创建日期数组