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()});