0

我正在尝试为 TextField 中的最大字符数设置一个限制。这是我尝试过的:

var text by remember { mutableStateOf("") }
val maxLength = 40
TextField(
    value = text,
    onValueChange = {
        text = it.take(maxLength)
    }
)

这是问题所在:

  • 当我超过限制时,整个文本突然被清除。
  • 这只发生一次,即当我重新输入并超出限制时它就停在那里(这是所需的行为)
  • 40 在这里似乎是一个神奇的数字,因为对于 maxLength = 39 或更低,一切正常。当我将限制设置为 40 或更高时,我看到了这种奇怪的行为。(这个幻数似乎并不取决于文本字段的宽度,因为我尝试了纵向和横向模式,结果是一样的)

如何摆脱这种行为?为 TextField 文本设置最大长度的正确方法是什么?

在此处输入图像描述

4

1 回答 1

1

您不应该使用 take() 来限制字符串的数量。

take() 仅表示获取第一个字符串。

可以考虑字符串本身,判断字符串个数不超过40即可。

var text by remember { mutableStateOf("") }
val maxLength = 40
TextField(
    value = text,
    onValueChange = {
        if (it.length <= 40)
          text = it
    }
)
于 2021-10-25T06:14:46.183 回答