设置EditText的filters时出现Unresolved reference: DecimalDigitsInputFilter如何解决
Unresolved reference: DecimalDigitsInputFilter 报错的根因是:DecimalDigitsInputFilter 不是Android官方SDK内置的类,你没有提前定义或导入对应实现时就会触发该错误。
解决方法1:自定义实现该类(推荐)
直接复制以下通用实现到你的项目中即可,支持自定义小数点后保留的位数:
import android.text.InputFilter import android.text.SpannableStringBuilder import android.text.Spanned class DecimalDigitsInputFilter(private val decimalDigits: Int) : InputFilter { override fun filter( source: CharSequence?, start: Int, end: Int, dest: Spanned?, dstart: Int, dend: Int ): CharSequence? { dest ?: return null val dotIndex = dest.indexOf('.') // 已经输入小数点的场景 if (dotIndex >= 0) { // 光标在小数点之前,不做限制 if (dend <= dotIndex) return null // 现有小数点后位数已达上限,禁止再输入 val existedAfterDotCount = dest.length - dotIndex - 1 if (existedAfterDotCount >= decimalDigits) return "" // 计算新增输入后是否超出位数限制,超出则裁剪 val newDigitCount = source?.count { it.isDigit() } ?: 0 if (existedAfterDotCount + newDigitCount > decimalDigits) { source ?: return "" val keepCount = decimalDigits - existedAfterDotCount var keptDigit = 0 val sb = SpannableStringBuilder() for (i in start until end) { val c = source[i] if (c.isDigit()) { if (keptDigit < keepCount) { sb.append(c) keptDigit++ } } else { sb.append(c) } } return sb } } return null } }
添加后你原本的调用代码即可正常运行,传入的参数2代表限制小数点后最多保留2位。
如果你使用Java开发,搜索对应Java版本的DecimalDigitsInputFilter实现即可,逻辑完全一致。
解决方法2:使用系统内置属性替代
如果不需要额外的自定义逻辑,也可以直接在EditText的布局配置中添加属性实现类似效果,不需要额外编写Filter:
<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="numberDecimal" android:maxLength="7" android:digits="0123456789." />
内容的提问来源于stack exchange,提问作者GrandPC
相关产品推荐
相关产品推荐

