目標
限制EditText輸入,最多允許三位小數,最大1000000.
解決方案
private fun editTextFilter(context: Context): InputFilter {
//最大允許輸入的數
val maxValue = 1000000
//最多保留幾位小數
val maxCountAfterDot = 3
return object : InputFilter {
override fun filter(source: CharSequence, start: Int, end: Int,
dest: Spanned, dstart: Int, dend: Int): CharSequence? {
val currentInput = source.toString()
val originalText = etcFeeEt.text
if (originalText.isNotEmpty()) {
val dotIndex = originalText.indexOf(".")
if (dotIndex != -1 && dotIndex < originalText.length - maxCountAfterDot) {
return ""
}
val tempText = "$originalText$currentInput"
val doubleValue = tempText.toDoubleOrNull()
if (doubleValue == null) {
return ""
} else if (doubleValue > maxValue) {
Toast.makeText(context, "數字太大", Toast.LENGTH_LONG).show()
return ""
}
} else {
if (currentInput == ".") {
return ""
}
}
return source
}
}
}
- 調用
editText.filters = arrayOf(editTextFilter(context))