gpt4 book ai didi

android - 用于文本选择的 float 工具栏 Jetpack Compose

转载 作者:行者123 更新时间:2023-12-04 23:54:07 28 4
gpt4 key购买 nike

如何为 Jetpack Compose 中的 TextField 自定义所选文本的菜单?我的意思是这样的:
Example
在官方文档或互联网上没有找到关于如何使用 Jetpack Compose 执行此操作的任何内容。

最佳答案

您可以提供自定义TextToolbarLocalTextToolbar .那里,在showMenu方法,你必须startActionMode就像您在旧 Android 中所做的那样。CustomTextToolbar :

override fun showMenu(
rect: Rect,

onCopyRequested: (() -> Unit)?,
onPasteRequested: (() -> Unit)?,
onCutRequested: (() -> Unit)?,
onSelectAllRequested: (() -> Unit)?

// Before 1.2.0 ActionCallback has to be defined like this:
// typealias ActionCallback = () -> Unit
//
// 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")
}
}
作为引用如何实现它,请查看撰写源代码: AndroidTextToolbarTextActionModeCallback
然后你可以像这样使用它:
CompositionLocalProvider(
LocalTextToolbar provides CustomTextToolbar(LocalView.current)
) {
var text by remember { mutableStateOf("") }
TextField(value = text, onValueChange = { text = it })
}
要使整个应用程序都可以使用,您需要在可组合树的顶部执行此操作,例如在 setContent 中。 .
p.s.我必须定义 ActionCallback ,因为它在 compose 中是内部的。我相信这是一个错误,所以我创建了 this issue .它是 fixed在撰写 1.2.0-alpha05 .

关于android - 用于文本选择的 float 工具栏 Jetpack Compose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68956792/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com