TextField maxLength - Android Jetpack Compose
TextField maxLength - Android Jetpack Compose
是否有现成的解决方案来限制 TextField 中的字符大小?
我没有看到像 XML.
中那样的任何 maxLength 参数
1.x.y
没有内置参数。
您可以使用类似的东西:
var text by remember { mutableStateOf(TextFieldValue("")) }
val maxChar = 5
TextField(
singleLine = true,
value = text,
onValueChange = {
if (it.length <= maxChar) text = it
}
)
另一种可以被认为更灵活的方法是:
Text(
text = "A string with a lot of charsssssssssssssssssssssssssss"
modifier = Modifier.fillMaxWidth(.5f),
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
这将用 fillMaxWidth
位限制宽度,用 maxLines
部分限制高度。如果这两个约束都满足,文本将溢出并且可以指定溢出的行为
在这种情况下,一旦文本占据了视图的一半或超过一行,它最终会变成 A string with a lot of charsssss...
这个问题的第一个答案很好,但确实在某些情况下会出现错误,当超过允许的字符数时,texfield 的值会被清除。这种失败似乎是由于预测文本,因为如果在 android 中禁用预测文本,则不会发生这种情况。我现在找到的一种解决方法是使用 focusManager 来“限制写入”。
首先,我们需要获取焦点管理器来控制屏幕上的焦点。
我们可以通过在可组合函数中添加这一行来做到这一点:
val focusManager = LocalFocusManager.current
然后,在我们的 TextField 中,我们可以使用 focusManager 来避免用户写入超过 maxChar 限制的内容。我们可以将焦点移动到下一个元素,在超过 maxChar 限制时清除焦点,或者接收 lambda 函数并执行我们想要的操作。这取决于我们。
var text by remember { mutableStateOf(TextFieldValue("")) }
val maxChar = 10
TextField(
singleLine = true,
value = text,
onValueChange = {
// This line will take (in case the user try to paste a text from the clipboard) only the allowed amount of characters
text = it.take(maxChar)
if (it.length > maxChar){
focusManager.moveFocus(FocusDirection.Down) // Or receive a lambda function
}
}
)
用这种方式,用户永远不会写出超过限制所规定的字符数。显然,这是一个替代解决方案,在我的情况下解决了我的问题,现在我们必须等待看他们是否在本地添加它
是否有现成的解决方案来限制 TextField 中的字符大小? 我没有看到像 XML.
中那样的任何 maxLength 参数1.x.y
没有内置参数。
您可以使用类似的东西:
var text by remember { mutableStateOf(TextFieldValue("")) }
val maxChar = 5
TextField(
singleLine = true,
value = text,
onValueChange = {
if (it.length <= maxChar) text = it
}
)
另一种可以被认为更灵活的方法是:
Text(
text = "A string with a lot of charsssssssssssssssssssssssssss"
modifier = Modifier.fillMaxWidth(.5f),
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
这将用 fillMaxWidth
位限制宽度,用 maxLines
部分限制高度。如果这两个约束都满足,文本将溢出并且可以指定溢出的行为
在这种情况下,一旦文本占据了视图的一半或超过一行,它最终会变成 A string with a lot of charsssss...
这个问题的第一个答案很好,但确实在某些情况下会出现错误,当超过允许的字符数时,texfield 的值会被清除。这种失败似乎是由于预测文本,因为如果在 android 中禁用预测文本,则不会发生这种情况。我现在找到的一种解决方法是使用 focusManager 来“限制写入”。
首先,我们需要获取焦点管理器来控制屏幕上的焦点。 我们可以通过在可组合函数中添加这一行来做到这一点:
val focusManager = LocalFocusManager.current
然后,在我们的 TextField 中,我们可以使用 focusManager 来避免用户写入超过 maxChar 限制的内容。我们可以将焦点移动到下一个元素,在超过 maxChar 限制时清除焦点,或者接收 lambda 函数并执行我们想要的操作。这取决于我们。
var text by remember { mutableStateOf(TextFieldValue("")) }
val maxChar = 10
TextField(
singleLine = true,
value = text,
onValueChange = {
// This line will take (in case the user try to paste a text from the clipboard) only the allowed amount of characters
text = it.take(maxChar)
if (it.length > maxChar){
focusManager.moveFocus(FocusDirection.Down) // Or receive a lambda function
}
}
)
用这种方式,用户永远不会写出超过限制所规定的字符数。显然,这是一个替代解决方案,在我的情况下解决了我的问题,现在我们必须等待看他们是否在本地添加它