簡體   English   中英

用於文本選擇的浮動工具欄 Jetpack Compose

[英]Floating toolbar for text selection Jetpack Compose

如何為 Jetpack Compose 中的 TextField 自定義所選文本的菜單? 我的意思是這樣的:

例子

在官方文檔或互聯網上沒有找到關於如何使用 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")
    }
}

作為參考如何實現它,請查看編寫源代碼: AndroidTextToolbarTextActionModeCallback

然后你可以像這樣使用它:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM