我正在使用 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) },
...
從另一個角度來看,我也設定了字符數限制,并且成功了。不同的是,這一次,“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) },
...
有人可以幫助我嗎?謝謝你。
uj5u.com熱心網友回復:
第二個(intro)您使用的是隱式it引數而不是intro狀態變數
onValueChange = { // <-- implicit `it`
if (it.length <= maxChar) {
intro = it
}
}
而在第二個(editedContent)上,您正在使用狀態變數,所以當editedContentlength到達1200并且您輸入另一個字符時,它仍將滿足您的onValueChange條件<=,使其成為1201,當您嘗試時delete,條件將不再滿足,不變化將發生在editedContent
onValueChange = { newValue: String -> // <-- use this
if (editedContent.value.length <= maxChar) {
editedContent.value = newValue
}
}
所以做你在第二個到第一個所做的事情,它會起作用
onValueChange = { newValue: String ->
if (newValue.length <= maxChar) {
editedContent.value = newValue
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/526242.html
標籤:安卓科特林android-jetpack-compose文本域
