Android 十进制输入过滤器

3

我想创建一个EditText来输入十进制值,允许小数点后2位(可选)。值可以是:

xxxx

xxxx.x

xx.xx

.xx

.x

x.x

我在 S/O 中尝试了很多解决方案,找到了适合我的解决正则表达式。但是没有任何一个满足我的要求。有些方案符合要求,但不允许在小数点前进行编辑。例如,当edittext的值为.xx时,则无法在小数点前(.)进行编辑。

有人能指出合适的解决方案吗?

N.B.:在EditText中使用maxLength属性。


正则表达式的作用是什么?匹配所有的十进制数吗? - Kenny Lau
你的输出需求是什么? - Mr X
你能找到一个解决方案吗?我也遇到了同样的问题。在小数点之前,我无法添加新的字符... - atasoyh
@atasoyh,没有找到任何正则表达式的解决方案,使用TextWatcher来克服这种情况。 - Mostafa Imran
1个回答

2

请尝试这个:

public class DecimalDigitsInputFilter implements InputFilter {

    Pattern mPattern;

    public DecimalDigitsInputFilter(int digitsBeforeZero,int digitsAfterZero) {
        mPattern=Pattern.compile("[0-9]{0," + (digitsBeforeZero-1) + "}+((\\.[0-9]{0," + (digitsAfterZero-1) + "})?)||(\\.)?");
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

            Matcher matcher=mPattern.matcher(dest);       
            if(!matcher.matches())
                return "";
            return null;
        }


    }

并将过滤器设置为“编辑文本”

editText.setFilters(new InputFilter[] { new DecimalDigitsInputFilter(10, 2) });

1
我也用过这个。它满足了我的需求,但是不允许在小数点(.)之前进行修改。 - Mostafa Imran
你具体想要什么? - Pradeep Gupta
1
使用您的解决方案,在EditText中输入0.33的值,并尝试在小数点前添加一些内容。我相信这是不可能发生的。 - Mostafa Imran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接