android – 具有货币格式的EditText

我有一个EditText,我想显示货币:
input.setInputType(InputType.TYPE_CLASS_NUMBER);
    input.addTextChangedListener(new CurrencyTextWatcher());

有:

public class CurrencyTextWatcher implements TextWatcher {

boolean mEditing;

public CurrencyTextWatcher() {
    mEditing = false;
}

public synchronized void afterTextChanged(Editable s) {
    if(!mEditing) {
        mEditing = true;

        String digits = s.toString().replaceAll("\\D","");
        NumberFormat nf = NumberFormat.getCurrencyInstance();

        try{
            String formatted = nf.format(Double.parseDouble(digits)/100);
            s.replace(0,s.length(),formatted);
        } catch (NumberFormatException nfe) {
            s.clear();
        }

        mEditing = false;
    }
}

我想让用户看到一个数字键盘,这就是为什么我打电话

input.setInputType(InputType.TYPE_CLASS_NUMBER);

在我的EditText上但是,它不起作用我看到没有格式化输入的数字.但是:如果我没有通过input.setInputType(InputType.TYPE_CLASS_NUMBER)设置inputType,则格式化将完美地工作.但用户必须使用普通键盘,这不是很好.如何使用数字键盘,并在我的EditText中看到正确的货币格式?谢谢.

解决方法

最好使用InputFilter接口.使用正则表达式更容易处理任何类型的输入.我的货币输入格式解决方
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,10,010.00,01.0
如何使用:

editText.setFilters(new InputFilter[] {new CurrencyFormatInputFilter()});

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...