[英]Floating toolbar for text selection Jetpack Compose
您可以在LocalTextToolbar
TextToolbar
在那里,在showMenu
方法中,您必須像在舊 Android 中那樣啟動startActionMode
。 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")
}
}
作為參考如何實現它,請查看編寫源代碼: AndroidTextToolbar和TextActionModeCallback
然后你可以像這樣使用它:
CompositionLocalProvider(
LocalTextToolbar provides CustomTextToolbar(LocalView.current)
) {
var text by remember { mutableStateOf("") }
TextField(value = text, onValueChange = { text = it })
}
要使整個應用程序都可以使用此功能,您需要在可組合樹的頂部執行此操作,例如在setContent
中。
ps 我必須定義ActionCallback
,因為它是 compose 內部的。 我相信這是一個錯誤,所以我創建了這個問題。 它已在 Compose 1.2.0-alpha05中修復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.