安卓通過InputFilter限制EditText輸入 目標 解決方案

目標

限制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))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章