android – 具有货币格式的EditText

前端之家收集整理的这篇文章主要介绍了android – 具有货币格式的EditText前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个EditText,我想显示货币:
  1. input.setInputType(InputType.TYPE_CLASS_NUMBER);
  2. input.addTextChangedListener(new CurrencyTextWatcher());

有:

  1. public class CurrencyTextWatcher implements TextWatcher {
  2.  
  3. boolean mEditing;
  4.  
  5. public CurrencyTextWatcher() {
  6. mEditing = false;
  7. }
  8.  
  9. public synchronized void afterTextChanged(Editable s) {
  10. if(!mEditing) {
  11. mEditing = true;
  12.  
  13. String digits = s.toString().replaceAll("\\D","");
  14. NumberFormat nf = NumberFormat.getCurrencyInstance();
  15.  
  16. try{
  17. String formatted = nf.format(Double.parseDouble(digits)/100);
  18. s.replace(0,s.length(),formatted);
  19. } catch (NumberFormatException nfe) {
  20. s.clear();
  21. }
  22.  
  23. mEditing = false;
  24. }
  25. }

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

  1. input.setInputType(InputType.TYPE_CLASS_NUMBER);

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

解决方法

最好使用InputFilter接口.使用正则表达式更容易处理任何类型的输入.我的货币输入格式解决方
  1. public class CurrencyFormatInputFilter implements InputFilter {
  2.  
  3. Pattern mPattern = Pattern.compile("(0|[1-9]+[0-9]*)?(\\.[0-9]{0,2})?");
  4.  
  5. @Override
  6. public CharSequence filter(
  7. CharSequence source,int start,int end,Spanned dest,int dstart,int dend) {
  8.  
  9. String result =
  10. dest.subSequence(0,dstart)
  11. + source.toString()
  12. + dest.subSequence(dend,dest.length());
  13.  
  14. Matcher matcher = mPattern.matcher(result);
  15.  
  16. if (!matcher.matches()) return dest.subSequence(dstart,dend);
  17.  
  18. return null;
  19. }
  20. }

有效:0.00,0.0,10.00,111.1
无效:0,0.000,111,10,010.00,01.0
如何使用:

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

猜你在找的Android相关文章