一个EditText,只允许输入有效的带符号十进制数

时间:2017-03-31 01:36:14

标签: android android-edittext

有许多类似的问题,但没有适用于所有键盘的适当解决方案。

我想要一个EditText,它只接受在所有常用键盘上输入的有效有符号十进制数字。我不希望能够输入多个小数点,或者在数字中间输入负号,这样我就不必捕捉异常。有效的带符号十进制数的示例是55,-65.43等。

现在这就是我所拥有的:

<EditText
            android:id="@+id/edittext"
            android:layout_width="128dp"
            android:layout_height="wrap_content"
            android:digits="-0123456789.,"
            android:gravity="center"
            android:inputType="numberDecimal|numberSigned"
            android:maxLength="6"
            android:singleLine="true" />

我有InputFilter这样:

class DecimalDigitsInputFilter implements InputFilter
{

    private final int decimalDigits;

    public DecimalDigitsInputFilter(int decimalDigits)
    {
        this.decimalDigits = decimalDigits;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end,
            Spanned dest, int dstart, int dend)
    {
        int dotPos = -1;
        int len = dest.length();
        for (int i = 0; i < len; i++)
        {
            char c = dest.charAt(i);
            if (c == '.' || c == ',')
            {
                dotPos = i;
                break;
            }
        }
        if (dotPos >= 0)
        {

            // protects against many dots
            if (source.toString().equals(".") || source.toString().equals(","))
            {
                return "";
            }
            // if the text is entered before the dot
            if (dend <= dotPos)
            {
                return null;
            }
            if (len - dotPos > decimalDigits)
            {
                return "";
            }
        }
        if (source.toString().equals("-") && dest.length() > 0)
        {
            return "";
        }
        return null;
    }

}

除了某些三星键盘将小数点和负号组合在一个键中之外(其中按钮必须点击两次才能得到负号),其中的工作正常。在这种情况下,它不允许负号。

当然必须有办法正确地做到这一点吗?

enter image description here

0 个答案:

没有答案