BasicTextField 最大长度错误。如果超过最大长度,BasicTextField 将无法正常工作
Posted
技术标签:
【中文标题】BasicTextField 最大长度错误。如果超过最大长度,BasicTextField 将无法正常工作【英文标题】:BasicTextField maxlength Bug. If you go over the maximum length, BasicTextField doesn't work normally 【发布时间】:2022-01-06 00:48:27 【问题描述】:我的代码
我尝试将长度限制为最多 30 个字符, 但如果我写了超过 30 个字符, 它将不再被输入或删除。这是为什么呢?
我想做的是创建一个类似于 xml 中的 EditText 的视图。
你想要的功能。
提示 最大长度但是,Jetpack Compose TextField() 不支持以上两个函数。
@Composable
fun MyCustomEditText(
placeholder: String = stringResource(id = "sample"),
)
var inputText by remember mutableStateOf("")
BasicTextField(
value = inputText,
onValueChange = if (it.length <= 30) inputText = it ,
singleLine = false,
maxLines = 2,
decorationBox = innerTextField ->
if (inputText.isEmpty()) Text(text = placeholder)
innerTextField()
)
【问题讨论】:
我运行了您的代码,如果我尝试输入超过 30 个字符,则会被阻止。当达到 30 个字符时,我也可以删除字符。那么究竟是什么问题呢? 【参考方案1】:-
您可以使用
TextField
或OutlinedTextField
来设置占位符。
例如:-
TextField(
value = someText,
onValueChange = someText = it ,
label = Text("Simple TextField") , // It will be shown on the top when focussed
placeholder = Text("Placeholder text") , // It will be shown as hint when nothing is typed
)
-
您提到您已将长度限制为 30 个字符,然后尝试写入超过 30 个字符。同样在代码中,我可以看到长度固定为 30 个字符
onValueChange = if (it.length <= 30) inputText = it
的情况,所以我不确定如何输入超过 30 个字符。在此文本字段中。
【讨论】:
请看上面提到的代码。 为什么要设置这个?if (it.length >= 30) inputText = it.substring(0 until 29) else inputText = it
你可以简单地使用旧的那有什么问题? onValueChange = if (it.length <= 30) inputText = it
没有可以限制长度的参数,所以我准备自定义使用。 TextField() or BasicTextField() * hint * maxLength 设置上述条件有没有更好的办法?
对于你有占位符和 maxlength 的提示,你可以简单地使用这个:- onValueChange = if (it.length <= yourMaxLength) inputText = it
如果文本大小更大 yourMaxLength
那么什么都不会发生,如果你按退格键,那么最后一个字符将是已删除。
用你建议的代码限制最大长度为30个字符时,会出现以下现象。请检查链接。 drive.google.com/file/d/1sRhq6pCS3AWbQacYgtrWPGcDyUL_t34d/…以上是关于BasicTextField 最大长度错误。如果超过最大长度,BasicTextField 将无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
Jetpack Compose 中 BasicTextField 的焦点有多清晰?
Compose BasicTextField fontSize 字体大小 AutoSize超过一定高度后自动变小