Android MoneyEditUtil金额限制输入框

作者: 倔强的炉包 | 来源:发表于2018-01-24 14:40 被阅读239次

关于金额的输入需要考虑以下几种情况

  • 过滤除了小数点和数字的其他字符
  • 第一个字符是小数点前面需要补0,小数点只能输入两位
  • 第一个字符是大于0的数字,整数部分最多可以输入9位
  • 第一个字符是等于0的字符,第二个数字必须是小数点
  • 小数点只能输入一个
    使用:
MoneyEditUtils .afterDotTwo(mEditText);
public class MoneyEditUtils {
    
    private static DecimalFormat df = new DecimalFormat("#0.00");

    public static void afterDotTwo(final EditText editText) {
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String money = s.toString();
                try {
                    if (TextUtils.isEmpty(money)) {
                        money = "0.00";
                    } else {
                        money = df.format(Double.valueOf(money));
                    }
                } catch (NumberFormatException e) {
                    //避免输入多余的小数点
                    editText.setText(money.substring(0, money.length() - 1));
                    editText.setSelection(editText.length());
                }
                if (s.toString().contains(".")) {
                    if (s.toString().indexOf(".") > 9) {
                        s = s.toString().subSequence(0, 9) + s.toString().substring(s.toString()
                                .indexOf("."));
                        editText.setText(s);
                        editText.setSelection(9);
                    }
                } else {
                    if (s.toString().length() > 9) {
                        s = s.toString().subSequence(0, 9);
                        editText.setText(s);
                        editText.setSelection(9);
                    }
                }
                // 判断小数点后只能输入两位
                if (s.toString().contains(".")) {
                    if (s.length() - 1 - s.toString().indexOf(".") > 2) {
                        s = s.toString().subSequence(0,
                                s.toString().indexOf(".") + 3);
                        editText.setText(s);
                        editText.setSelection(s.length());
                    }
                }
                //如果第一个数字为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);
                    }
                }
                //如果第一个输入的为点,自动在前面加0 要不会闪退
                if (s.toString().startsWith(".")) {
                    editText.setText("0.");
                    editText.setSelection(2);
                }
            }

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

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (!editText.getText().toString().trim().equals("")) {
                    if (editText.getText().toString().trim().substring(0, 1).equals(".")) {
                        editText.setText(String.format("0%s", editText.getText().toString().trim
                                ()));
                        editText.setSelection(1);
                    }
                }
            }
        });
    }
}

相关文章

网友评论

    本文标题:Android MoneyEditUtil金额限制输入框

    本文链接:https://www.haomeiwen.com/subject/uaruaxtx.html