用于文本选择的浮动工具栏 Jetpack Compose
Posted
技术标签:
【中文标题】用于文本选择的浮动工具栏 Jetpack Compose【英文标题】:Floating toolbar for text selection Jetpack Compose 【发布时间】:2021-10-27 14:14:07 【问题描述】:如何为 Jetpack Compose 中的 TextField 自定义所选文本的菜单?我的意思是这样的:
在官方文档或 Internet 上没有找到有关如何使用 Jetpack Compose 执行此操作的任何内容。
【问题讨论】:
【参考方案1】:您可以在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 )
要使整个应用程序都可以使用,您需要在可组合树的顶部执行此操作,例如在setContent
中。
附言我必须定义ActionCallback
,因为它在compose 内部。我相信这是一个错误,所以我创建了this issue
【讨论】:
以上是关于用于文本选择的浮动工具栏 Jetpack Compose的主要内容,如果未能解决你的问题,请参考以下文章