如何在EditText中限制小数点后的输入位数?
DecimalDigitsInputFilter 不属于Android官方SDK内置类,因此直接调用会出现未解析引用报错。要实现「输入总长度最多7位、小数位最多保留2位」的限制,可按以下步骤实现:
方案:自定义InputFilter实现小数位数限制
先实现自定义的小数位数过滤类:
import android.text.InputFilter import android.text.Spanned import java.util.regex.Pattern class DecimalDigitsInputFilter(private val decimalDigits: Int) : InputFilter { private val pattern: Pattern = Pattern.compile( "^[0-9]*+\\.?[0-9]{0,$decimalDigits}$" ) override fun filter( source: CharSequence?, start: Int, end: Int, dest: Spanned?, dstart: Int, dend: Int ): CharSequence? { val input = dest.toString().substring(0, dstart) + source.toString().substring(start, end) + dest.toString().substring(dend) return if (pattern.matcher(input).matches()) { // 符合规则不拦截输入 null } else { // 不符合规则拦截本次输入 "" } } }
之后就可以直接用你原有逻辑设置过滤规则:
editText.filters = arrayOf<InputFilter>( InputFilter.LengthFilter(7), DecimalDigitsInputFilter(2) )
补充说明
如果需要同时限制整数部分位数,可修改自定义Filter的正则规则,比如限制整数部分最多5位、小数2位,可将正则改为^[0-9]{0,5}+\\.?[0-9]{0,2}$即可。
内容的提问来源于stack exchange,提问作者GrandPC
相关产品推荐
相关产品推荐

