【问题标题】:Manipulate/Change Keyboard Input in Jetpack Compose TextField在 Jetpack Compose TextField 中操作/更改键盘输入
【发布时间】:2021-05-06 04:20:02
【问题描述】:

Jetpack Compose 中是否有一种方法可以在使用mapper : (String) -> String 函数可能随时间变化的函数实际显示之前处理在TextField 中输入的每个字符。

我尝试用 TextField 实现这个

var value  by remember { mutableStateOf("") }

TextField(value = value, onValueChange = {
   //I could perform manipulation here
   value = it
})

但它不起作用,因为它正在操作整个文本而不是最近的字符。此外,在此过程中更改光标位置或更改映射器功能时,它会导致可预测的行为

注意:VisualTransformation 也不适合。它应用于整个文本

我认为我们必须从另一个层面解决这个问题。有没有办法在 Jetpack Compose 中实现这种行为?

【问题讨论】:

  • 你试过visualTransformation参数到TextField()吗?
  • @CommonsWare @adneal visualTransformation 似乎不合适,因为它应用于整个文本

标签: android android-jetpack-compose


【解决方案1】:

我在使用 compose 实现文本验证 UI 时遇到了类似的挑战。由于输入焦点未处于就绪状态,我最终只针对需要数字的输入执行了以下操作。

onValueChange = {
        // only accept the first number value entered
        number = it.text.replace(Regex("\\D"), "").take(1)

        // move to the next field
        if (number.isNotEmpty()) {
            nextFocus?.requestFocus() ?: run {
                onVerifyPin?.invoke()
            }
        }
    }

使用正则表达式和 kotlin 的最后一个运算符,您可以获得所需的结果。 https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/last.html

【讨论】:

    猜你喜欢
    • 2021-08-26
    • 2022-11-21
    • 2021-10-01
    • 2022-11-15
    • 2021-11-16
    • 2020-03-26
    • 2023-01-16
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多