有许多类似的问题,但没有适用于所有键盘的适当解决方案。
我想要一个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;
}
}
除了某些三星键盘将小数点和负号组合在一个键中之外(其中按钮必须点击两次才能得到负号),其中的工作正常。在这种情况下,它不允许负号。
当然必须有办法正确地做到这一点吗?