[英]java.lang.NumberFormatException: multiple points with KeyboardType.Decimal
我在下面顯示的OutlinedTextField
的keyboardOptions
條目中使用KeyboardType.Decimal
作為鍵盤類型,但它允許在鍵入的數字中使用多個小數。 對諸如"2.5.8".toDouble()
這樣的輸入進行任何轉換都會引發如下所示的multiple points
異常。 我怎樣才能確保只允許一個小數點並且任何后續的小數鍵按下都不會做任何事情?
可組合
CustomOutlinedTextField(
fieldModifier = Modifier
.width(100.dp)
.onFocusChanged {
if (!it.isFocused) {
if (mainViewModel.shoppingListItemState.value.quantity == "" || mainViewModel.shoppingListItemState.value.quantity == "0") {
mainViewModel.setStateValue(
ITEM_QUANTITY_STR,
"1"
)
}
}
}
.onPreviewKeyEvent {
if (it.key == Key.Tab && it.nativeKeyEvent.action == ACTION_DOWN) {
focusManager.moveFocus(FocusDirection.Right)
true
} else {
false
}
},
label = ITEM_QUANTITY_STR,
inputVal = mainViewModel.shoppingListItemState.value.quantity,
isSingleLine = true,
keyboardOptions = KeyboardOptions.Default.copy(
capitalization = KeyboardCapitalization.None,
autoCorrect = false,
keyboardType = KeyboardType.Decimal,
imeAction = ImeAction.Next
),
keyboardActions = KeyboardActions(
onNext = { focusManager.moveFocus(FocusDirection.Right) }
)
) { value ->
mainViewModel.setStateValue(ITEM_QUANTITY_STR, value)
}
例外
java.lang.NumberFormatException: multiple points
您可以在TextField
的decimalSeparator
中檢查onValueChange
的數量,並且只允許一個。 建議獲取decimalSeparator
而不是與.
因為它可能會根據設備區域設置而改變。 下面是一個TextField
的示例實現,它只檢查並允許一個decimalSeparator
。
val decimalFormat = DecimalFormat.getInstance(Locale.getDefault()) as DecimalFormat
val decimalSeparator = decimalFormat.decimalFormatSymbols.decimalSeparator
var text by remember { mutableStateOf("123") }
TextField(
value = text,
keyboardOptions = KeyboardOptions.Default.copy(
keyboardType = KeyboardType.Decimal
),
onValueChange = { value ->
val counter = value.count { it == decimalSeparator }
if (counter <= 1) { text = value }}
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.