Android EditText-仅允许一个十进制分隔符
我希望EditText只允许字符Android EditText-仅允许一个十进制分隔符,android,android-edittext,number-formatting,Android,Android Edittext,Number Formatting,我希望EditText只允许字符0123456789.,,其中逗号和点都应更改为mCurrencyFormatter.getDecimalSeparator()指定的字符。第二部分是通过下面InputFilter中的filter(…)方法实现的。但是,我不能强制EditText阻止第二个逗号/点。我想在这个类中通过注释代码来实现这一点,但它不起作用。我知道人们可以在xml文件中编写android:inputType=“numberDecimal”,但由于一个长期存在的android错误,它总是将
0123456789.,
,其中逗号和点都应更改为mCurrencyFormatter.getDecimalSeparator()
指定的字符。第二部分是通过下面InputFilter
中的filter(…)
方法实现的。但是,我不能强制EditText阻止第二个逗号/点。我想在这个类中通过注释代码来实现这一点,但它不起作用。我知道人们可以在xml文件中编写android:inputType=“numberDecimal”
,但由于一个长期存在的android错误,它总是将十进制分隔符识别为点。有人知道如何防止输入第二个十进制分隔符吗
输入过滤器代码:
class CurrencyInputFilter implements InputFilter {
StringBuilder sb = new StringBuilder();
boolean decimalExists;
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
int dend) {
sb.setLength(0);
decimalExists = false;
char c;
// for (int i = 0; i < start - 1; i++) {
// c = source.charAt(i);
// if (Character.toString(c).equals(".") || Character.toString(c).equals(",")) {
// decimalExists = true;
// break;
// }
// }
// if (!decimalExists) for (int i = end; i < source.length(); i++) {
// c = source.charAt(i);
// if (Character.toString(c).equals(".") || Character.toString(c).equals(",")) {
// decimalExists = true;
// break;
// }
// }
for (int i = start; i < end; i++) {
c = source.charAt(i);
if (Character.isDigit(c)) sb.append(c);
if ((Character.toString(c).equals(".") || Character.toString(c).equals(","))
&& !decimalExists) {
sb.append(mCurrencyFormatter.getDecimalSeparator());
// decimalExists = true;
}
}
// decimalExists = false;
return sb;
}
}
类CurrencyInputFilter实现InputFilter{
StringBuilder sb=新的StringBuilder();
布尔十进制存在;
@凌驾
公共CharSequence筛选器(CharSequence源、int开始、int结束、跨距目标、int开始、,
内特丹德酒店{
sb.设定长度(0);
十分法=假;
字符c;
//对于(int i=0;i
我的编辑文本的xml:
<EditText
android:id="@+id/my_edit_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:freezesText="true"
android:imeOptions="actionDone"
android:digits="0123456789.,"
android:inputType="numberDecimal"
android:selectAllOnFocus="true"
android:singleLine="true"
android:textSize="16sp" />
希望这会对某人有所帮助。我需要按程序做这件事 方法1:
editText.setKeyListener(DigitsKeyListener.getInstance(true,true));
方法2:(方法1对我不起作用)
首先根据设备区域设置获取默认的十进制分隔符:
DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(Locale.getDefault());
DecimalFormatSymbols symbols=format.getDecimalFormatSymbols();
defaultSeperator=Character.toString(symbols.getDecimalSeparator());
然后在EditText TextWatcher的后文本更改中添加:
editText.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable editable) {
if(editable.toString().contains(defaultSeperator))
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
else
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789" + defaultSeperator));
}
}