Yuk*_*uki 5 android textfield kotlin android-jetpack-compose
我正在使用 Jetpack Compose 开发 Android 应用程序。我想在 Textfield 上设置字符数限制,但如果我尝试此代码,用户最多可以输入 1201 个字符(maxChar+1),并且如果用户输入 1201 个字符(超过 maxChar),则无法删除任何字母。
@Composable
fun PostEdit(navController: NavController, content: String, id: String) {
var editedContent = remember { mutableStateOf("$content")}
val maxChar = 1200
...
OutlinedTextField(
value = editedContent.value,
onValueChange = { newValue: String ->
if (editedContent.value.length <= maxChar) {
editedContent.value = newValue
}
},
label = { Text("Content", fontSize = 20.sp, color = Brown) },
...
Run Code Online (Sandbox Code Playgroud)
从不同的角度来看,我也设置了字符数限制,并且是成功的。不同的是,这次“var intro”中没有参数。这是代码。
@Composable
fun Signup(navController: NavController)
var intro by remember { mutableStateOf("") }
val maxChar = 100
...
OutlinedTextField(
value = intro,
onValueChange = {
if (it.length <= maxChar) {
intro = it
}
},
label = { Text("Introduction", fontSize = 20.sp, color = Brown) },
...
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我吗?谢谢。
第二个 ( intro) 您使用的是隐式it参数而不是intro状态变量
onValueChange = { // <-- implicit `it`
if (it.length <= maxChar) {
intro = it
}
}
Run Code Online (Sandbox Code Playgroud)
而在第一个 ( editedContent) 上,您使用的是状态变量,因此当editedContentlength到达1200并且您键入另一个字符时,它仍然会满足您的onValueChange条件<=,从而使之满足1201,并且当您尝试这样做时delete,条件将不再满足,不将会发生改变editedContent
onValueChange = { newValue: String -> // <-- use this
if (editedContent.value.length <= maxChar) {
editedContent.value = newValue
}
}
Run Code Online (Sandbox Code Playgroud)
所以按照你在第二个和第一个上所做的那样做,它就会起作用
onValueChange = { newValue: String ->
if (newValue.length <= maxChar) {
editedContent.value = newValue
}
}
Run Code Online (Sandbox Code Playgroud)