在 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~
Android Jetpack Compose学习—— Jetpack compose入门