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】:
    您可以使用TextFieldOutlinedTextField 来设置占位符。

例如:-

 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 &lt;= 30) inputText = it 的情况,所以我不确定如何输入超过 30 个字符。在此文本字段中。

【讨论】:

请看上面提到的代码。 为什么要设置这个? if (it.length &gt;= 30) inputText = it.substring(0 until 29) else inputText = it 你可以简单地使用旧的那有什么问题? onValueChange = if (it.length &lt;= 30) inputText = it 没有可以限制长度的参数,所以我准备自定义使用。 TextField() or BasicTextField() * hint * maxLength 设置上述条件有没有更好的办法? 对于你有占位符和 maxlength 的提示,你可以简单地使用这个:- onValueChange = if (it.length &lt;= yourMaxLength) inputText = it 如果文本大小更大 yourMaxLength 那么什么都不会发生,如果你按退格键,那么最后一个字符将是已删除。 用你建议的代码限制最大长度为30个字符时,会出现以下现象。请检查链接。 drive.google.com/file/d/1sRhq6pCS3AWbQacYgtrWPGcDyUL_t34d/…

以上是关于BasicTextField 最大长度错误。如果超过最大长度,BasicTextField 将无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Jetpack Compose 中 BasicTextField 的焦点有多清晰?

JDBC插入数据超长时无法自动截断问题

Compose BasicTextField fontSize 字体大小 AutoSize超过一定高度后自动变小

Wear OS 上 Jetpack Compose 中的 BasicTextField 问题

SonarQube 错误:组件密钥长度超过授权的最大长度

如何解决“超出最大请求长度”异常?