本文介绍了用于文本选择Jetpack Compose的浮动工具栏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何将所选文本的菜单自定义为Jetpack Compose中的TextField?我的意思是这样的:在官方文档或Internet上找不到有关如何使用Jetpack Compose执行此操作的任何内容。
推荐答案
您可以在LocalTextToolbar
中提供自定义的TextToolbar
。在这里,在showMenu
方法中,您必须像在旧Android中那样startActionMode
。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 })
}
若要使此操作适用于整个应用程序,您需要在Composables树的顶部执行此操作,例如,在setContent
中。
附注:我必须定义ActionCallback
,因为它在编写时是内部的。我认为这是一个错误,所以我创建了this issue
这篇关于用于文本选择Jetpack Compose的浮动工具栏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!