InputFilter工具类,限制小数位数,并实时千分位金额(格式化)

   今天回头看了看昨天的代码,才发现上篇总结的很不到位,存在很多bug,在这里稍微补充一下,

  来个加强版本

   上篇的不足之处:

       1 未做小数相关的逻辑编写

       2 没有考虑到输入非法字符时的情况

    完善后写成了一个工具类,更加方便调用与代码的规范

   效果图:

 

     首先判断是否允许输入数字包含小数类型,在此要限制EditText可接收的内容

    

<span style="font-family:Comic Sans MS;font-size:18px;"> mEditText.setKeyListener(new NumberKeyListener() {
                @Override
                protected char[] getAcceptedChars() {
                    if(isPoint){
                        return new char[]{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0','.'};
                    }
                    return new char[]{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
                }

                @Override
                public int getInputType() {
                    return InputType.TYPE_CLASS_NUMBER;
                }
            });</span>
   

    虽然限制了EditText可接收的内容,但当有非法字符输入时仍要做一定的判断,当输入除了0~9或者小数点以外的字符,都表示用户点击了非法字符.


    通过用户新输入的字符和文本框之前的字符来限制只能输入一个小数点,并限制小数的位数

<span style="font-family:Comic Sans MS;font-size:18px;">if(oldStr.contains(".")){
                //只能输入一个小数点
                if (newStr.contains(".")) {
                    return "";
                }
                //以小数点为界分割字符串
                String[] splitArray = oldStr.split("\\.");
                if (splitArray.length > 1) {
                    //得到小数点后的字符串
                    String dotValue = splitArray[1];
                    if (dotValue.length() == POINT_LENGHT) {
                        return "";
                    }
                }
            }</span>

    当输入字符长度大于2且没有非法字符和小数位时进行格式化金额操作
<span style="font-family:Comic Sans MS;font-size:18px;">//格式化金额,三位一断
        if (oldStr!=null && oldStr.length() > 2
                && !oldStr.contains(".") && !oldStr.contains(",")) {
            String newValue = oldStr + source;
            String amountStr = format.format(Double.parseDouble(newValue));
            mEditText.setText("");
            mEditText.setText(amountStr);
            mEditText.setSelection(amountStr.length());
            return amountStr;
        } </span>


    详细代码连接:http://download.csdn.net/detail/huiling815/9623118


  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值