Android 使用货币格式编辑文本
我有一个编辑文本,我想在其中显示货币:Android 使用货币格式编辑文本,android,Android,我有一个编辑文本,我想在其中显示货币: input.setInputType(InputType.TYPE_CLASS_NUMBER); input.addTextChangedListener(new CurrencyTextWatcher()); 与: 我想让用户看到一个数字键盘,这就是我打电话的原因 input.setInputType(InputType.TYPE_CLASS_NUMBER); 在我的编辑文本上。但是,它不起作用。我看到输入的数字没有任何格式。但是:如
input.setInputType(InputType.TYPE_CLASS_NUMBER);
input.addTextChangedListener(new CurrencyTextWatcher());
与:
我想让用户看到一个数字键盘,这就是我打电话的原因
input.setInputType(InputType.TYPE_CLASS_NUMBER);
在我的编辑文本上。但是,它不起作用。我看到输入的数字没有任何格式。但是:如果我不通过input.setInputType(inputType.TYPE\u CLASS\u NUMBER)设置inputType,格式就可以很好地工作。但是用户必须使用常规键盘,这并不好。如何使用数字键盘并在EditText中查看正确的货币格式?谢谢。请尝试在xml声明中添加此属性,以便编辑文本:
android:inputType=“numberDecimal”
或数字或签名数字
有关android:inputType的更多信息,请参见
。使用正则表达式处理任何类型的输入都要容易得多。我的货币输入格式解决方案:
public class CurrencyFormatInputFilter implements InputFilter {
Pattern mPattern = Pattern.compile("(0|[1-9]+[0-9]*)?(\\.[0-9]{0,2})?");
@Override
public CharSequence filter(
CharSequence source,
int start,
int end,
Spanned dest,
int dstart,
int dend) {
String result =
dest.subSequence(0, dstart)
+ source.toString()
+ dest.subSequence(dend, dest.length());
Matcher matcher = mPattern.matcher(result);
if (!matcher.matches()) return dest.subSequence(dstart, dend);
return null;
}
}
有效期:0.00,0.0,10.00,111.1
无效:0,0.000,111,1010.00,01.0
如何使用:
editText.setFilters(new InputFilter[] {new CurrencyFormatInputFilter()});
这很奇怪:你的建议都不管用,但我试着把android:inputType=“phone”放进去,这给出了正确的格式。但是,phone type有“?#+”键,这不是很好。有什么建议吗?您可以添加android:digits=“0123456789”以禁止输入非数字字符android:inputType=“numberDecimal”
绝对是这个特定用例的最佳答案。这是一个很好的方法,但给出的模式实际上不允许输入小数点,例如“12”。因此,您不能实际输入分数,您不能在输入后删除第一个数字,也不能只键入分数“.12”。修复这些问题的模式:“(0 |[1-9]+[0-9]*)?(\\.[0-9]{0,2})?”
editText.setFilters(new InputFilter[] {new CurrencyFormatInputFilter()});