Android EditText 保留指定位数小数

限制输入指定位数小数

重写 InputFilter 控制器

/**
 * 小数点位数限制
 * @pointLength 保留小数位数
 */
 class DecimalPointUtil(private val pointLength: Int) : InputFilter {
    /**
     * @param source 输入的文字
     * @param start 输入-0,删除-0
     * @param end 输入-文字的长度,删除-0
     * @param dest 原先显示的内容
     * @param dstart 输入-原光标位置,删除-光标删除结束位置
     * @param dend 输入-原光标位置,删除-光标删除开始位置
     * @return 需要变化的内容
     */
    override fun filter(
        source: CharSequence, start: Int, end: Int,
        dest: Spanned, dstart: Int, dend: Int
    ): CharSequence {
        val start1 = dest.subSequence(0, dstart)//删除后的内容前半截
        val end1 = dest.subSequence(dend, dest.length)//删除后的内容后半截
        val target = start1.toString().plus(source).plus(end1) //前半截 + 新内容 + 后半截 = 新字符串
        val backup = dest.subSequence(dstart, dend) // 需要变化的内容
        if (target.indexOf(".") == 0) return backup //小数点在第一位 直接返回原值
        if (target.startsWith("0") && !target.startsWith("0.") && "0" != target) return backup //如果新字符串 开始位置是 0 且不是 0. 且新字符串不是0 则返回 原值
        val index = target.indexOf(".")
        if (index >= 0 && index + pointLength + 1 < target.length) return backup //有小数点,且实际长度大于理论长度(理论长度 = 小数点位置 + 1 + 保留位数 ) 返回原字符串不做处理
        return source
    }
}

使用方式

 					//设置限制输入浮点数
                    editText.inputType = TYPE_CLASS_NUMBER or TYPE_NUMBER_FLAG_DECIMAL
                    //设置限制输入3位小数
                    editText.filters = arrayOf(DecimalPointUtil(3))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值