您可以提供定制TextToolbar
in the LocalTextToolbar
。在那里,在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")
}
}
作为如何实现它的参考,请查看 compose 源代码:Android文本工具栏 https://github.com/androidx/androidx/blob/3167373c96f8ab86f2d102b0e520cf185cf52b46/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidTextToolbar.android.kt#L32 and 文本操作模式回调 https://github.com/androidx/androidx/blob/3167373c96f8ab86f2d102b0e520cf185cf52b46/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/actionmodecallback/TextActionModeCallback.android.kt#L30
然后你可以像这样使用它:
CompositionLocalProvider(
LocalTextToolbar provides CustomTextToolbar(LocalView.current)
) {
var text by remember { mutableStateOf("") }
TextField(value = text, onValueChange = { text = it })
}
要使此操作适用于整个应用程序,您需要在可组合树的顶部执行此操作,例如在setContent
.
附注我必须定义ActionCallback
,因为它是内部的 compose。我相信这是一个错误,所以我创建了这个问题 https://issuetracker.google.com/issues/197950089。它是fixed https://developer.android.com/jetpack/androidx/releases/compose-ui#1.2.0-alpha05在撰写中1.2.0-alpha05.