在 Jetpack Compose TextField 中操作/更改键盘输入

Posted

技术标签:

【中文标题】在 Jetpack Compose TextField 中操作/更改键盘输入【英文标题】:Manipulate/Change Keyboard Input in 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()吗? 这里有几个samples using VisualTransformation @CommonsWare @adneal visualTransformation 似乎不合适,因为它应用于整个文本 【参考方案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

【讨论】:

以上是关于在 Jetpack Compose TextField 中操作/更改键盘输入的主要内容,如果未能解决你的问题,请参考以下文章

Android Jetpack Compose学习—— Jetpack compose基础布局

什么是Jetpack Compose?带你走进Jetpack Compose~

jetpack compose 接收返回参数

Android Jetpack Compose学习—— Jetpack compose入门

Android Jetpack Compose学习—— Jetpack compose入门

Jetpack All In Compose ?看各种Jetpack库在Compose中的使用