如何在 TextField Jetpack Compose 中禁用复制/粘贴/剪切?

Lim*_*mun 15 android textfield android-jetpack-compose

我正在尝试找到一个关于如何禁用文本字段中的复制/粘贴/剪切的简单解决方案。我确实遇到了几个问题,但没有答案。

Phi*_*hov 12

创建一个空工具栏:

object EmptyTextToolbar: TextToolbar {
    override val status: TextToolbarStatus = TextToolbarStatus.Hidden

    override fun hide() {  }

    override fun showMenu(
        rect: Rect,
        onCopyRequested: (() -> Unit)?,
        onPasteRequested: (() -> Unit)?,
        onCutRequested: (() -> Unit)?,
        onSelectAllRequested: (() -> Unit)?,
    ) {
    }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以使用 提供它LocalTextToolbar

在这种情况下,您很可能也不需要文本选择,以下是禁用它的方法:

var textValue by remember { mutableStateOf(TextFieldValue("")) }
CompositionLocalProvider(
    LocalTextToolbar provides EmptyTextToolbar
) {
    TextField(
        value = textValue,
        onValueChange = { newValue ->
            textValue = if (newValue.selection.length > 0) {
                newValue.copy(selection = textValue.selection)
            } else {
                newValue
            }
        }
    )
}
Run Code Online (Sandbox Code Playgroud)

  • 是不是有点过于复杂了? (6认同)