-1

i want to set value limit in edittext not character limit in edit text. like when i enter 100 it is entered or set max length 3. when i enter 30 it set max length 2 when i enter 4 then set max length 2 when i enter 2 then set max length 3

these all about number but in decimal(.) can't be enter first time or it can't be enter twice and after decimal it contain 2 value. example 100.00 entered 200.00 entered 30.745 not entered(set max length 2 after decimal)

Edit text code

 ed_weight.onChange {
            try {
                if (it.startsWith(".")) {
                    ed_weight.limitLength(1)
                } else if (it.toFloat() >= 30.00) {
                    if (it.contains(".")) {
                        var len = it.indexOf('.')
                        ed_weight.limitLength(len + 3)
                    } else {
                        ed_weight.limitLength(2)
                    }
                } else if (it.toFloat() < 299.00) {
                    if (it.contains(".")) {
                        var len = it.indexOf('.')
                        ed_weight.limitLength(len + 3)
                    } else {
                        ed_weight.limitLength(3)
                    }
                } else {
                    ed_weight.limitLength(3)
                }
            } catch (e: Exception) {
            }
        }

Extension file

fun EditText.onChange(cb: (String) -> Unit) {
    this.addTextChangedListener(object : TextWatcher {
        override fun afterTextChanged(s: Editable?) {
        }

        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
            cb(s.toString())
        }
    })
}
fun EditText.limitLength(maxLength: Int) {
    filters = arrayOf(InputFilter.LengthFilter(maxLength))
}

1 Answers1

0

Try android:maxLength="3"

Ref: http://androidblogger.blogspot.com/2009/01/numeric-edittext-and-edittext-with-max.html

Satya Kaveti
  • 346
  • 2
  • 6