设置文本最大长度时撰写文本字段的奇怪行为

Arp*_*kla 6 android kotlin android-jetpack-compose android-jetpack-compose-text

我正在尝试设置文本字段中最大字符数的限制。这是我尝试过的:

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

问题是这样的:

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

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

在此输入图像描述

Fut*_*one 1

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

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

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

var text by remember { mutableStateOf("") }
val maxLength = 40
TextField(
    value = text,
    onValueChange = {
        if (it.length <= 40)
          text = it
    }
)
Run Code Online (Sandbox Code Playgroud)