工具类:限制EditText输入小数位数,按照金额格式进行输入

APP里面经常需要设置EditText只能按照金额格式进行输入,正好整理一个工具类,日后可以直接拿去复制粘贴使用。嗯……懒惰使人进步!

首先可以限制EditText的长度,如果是金额的话,一个小目标怎么也够了。嗯……算上小数点一共12位,那么就在EditText的属性下加上 android:maxLength="12"
然后直接套用下面的工具类,把对应的EditText以及限制的位数直接传进去就好了。

实现

设置输入类型为小数数字,允许十进制小数点提供分数值。

  editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);

如果文本包括".",删除“.”后面超过2位后的数据

//                如果文本包括".",删除“.”后面超过2位后的数据
                if (s.toString().contains(".")) {
                    if (s.length() - 1 - s.toString().indexOf(".") > digits) {
                        s = s.toString().subSequence(0,
                                s.toString().indexOf(".") + digits + 1);
                        editText.setText(s);
                        editText.setSelection(s.length()); //光标移到最后
                    }
                }

未输入数字的情况下输入小数点时,个位数字自动补零

//                未输入数字的情况下输入小数点时,个位数字自动补零
                if (s.toString().trim().substring(0).equals(".")) {
                    s = "0" + s;
                    editText.setText(s);
                    editText.setSelection(2);
                }

如果文本以"0"开头并且第二个字符不是".",不允许继续输入

//                如果文本以"0"开头并且第二个字符不是".",不允许继续输入
                if (s.toString().startsWith("0")
                        && s.toString().trim().length() > 1) {
                    if (!s.toString().substring(1, 2).equals(".")) {
                        editText.setText(s.subSequence(0, 1));
                        editText.setSelection(1);
                        return;
                    }
                }

完整代码

完整代码如下,方便以后复制粘贴使用

    /**
     * 设置EditText为价钱输入模式
     *
     * @param editText 相应的EditText
     * @param digits   限制的小数位数
     */
    public static void setPriceMode(final EditText editText, final int digits) {
//        设置输入类型为小数数字,允许十进制小数点提供分数值。
        editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
//        给EditText设置文本变动监听事件
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
//                如果文本包括".",删除“.”后面超过2位后的数据
                if (s.toString().contains(".")) {
                    if (s.length() - 1 - s.toString().indexOf(".") > digits) {
                        s = s.toString().subSequence(0,
                                s.toString().indexOf(".") + digits + 1);
                        editText.setText(s);
                        editText.setSelection(s.length()); //光标移到最后
                    }
                }
//                未输入数字的情况下输入小数点时,个位数字自动补零
                if (s.toString().trim().substring(0).equals(".")) {
                    s = "0" + s;
                    editText.setText(s);
                    editText.setSelection(2);
                }
//                如果文本以"0"开头并且第二个字符不是".",不允许继续输入
                if (s.toString().startsWith("0")
                        && s.toString().trim().length() > 1) {
                    if (!s.toString().substring(1, 2).equals(".")) {
                        editText.setText(s.subSequence(0, 1));
                        editText.setSelection(1);
                        return;
                    }
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {

            }

        });
    }
发布了70 篇原创文章 · 获赞 176 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/zheng_weichao/article/details/79424489
今日推荐