【问题标题】:Android EditText with decimal value in format (3,2)Android EditText 格式为十进制值 (3,2)
【发布时间】:2015-07-01 07:25:29
【问题描述】:

我进行了很多搜索,但没有找到解决问题的方法。 我怎样才能有一个editText,用户可以在其中输入十进制格式的数字,其中格式应该是小数点前的整数和小数点后的两个整数。

如果用户输入 1 那么它应该是 1.00 并且不允许输入大于 9.99 的值。

我参考了不同的代码,但没有任何效果。 下面是我的代码 -

 public class DecimalDigitsInputFilter implements InputFilter {

    Pattern mPattern;

    public DecimalDigitsInputFilter(int digitsBeforeZero,int digitsAfterZero) {
        mPattern=Pattern.compile("[0-9]{0," + (digitsBeforeZero-1) + "}+((\\.[0-9]{0," + (digitsAfterZero-1) + "})?)||(\\.)?");
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

            Matcher matcher=mPattern.matcher(dest);       
            if(!matcher.matches())
                return "";
            return null;
        }

    }

mSetupProfileViewHolder.mAthleteGPAET.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(3,2)});

但它允许用户输入所有值,例如 333,999 等。

【问题讨论】:

    标签: android android-edittext decimalformat


    【解决方案1】:

    您想使用TextWatcher,然后在用户提交之前检查用户输入的内容。这是您要实现的代码示例:

    final EditText et = (EditText) findViewById(R.id.editText);
    et.addTextChangedListener(new TextWatcher() {
    
       public void onTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {             
    
       }
    
       public void beforeTextChanged(CharSequence arg0, int arg1,int arg2, int arg3) {             
    
       }
    
       public void afterTextChanged(Editable arg0) {
           if (arg0.length() > 0) {
               String str = et.getText().toString();
               et.setOnKeyListener(new OnKeyListener() {
                   public boolean onKey(View v, int keyCode, KeyEvent event) {
                       if (keyCode == KeyEvent.KEYCODE_DEL) {
                           count--;
                           InputFilter[] fArray = new InputFilter[1];
                           fArray[0] = new InputFilter.LengthFilter(100);
                           et.setFilters(fArray);
                           //change the edittext's maximum length to 100. 
                           //If we didn't change this the edittext's maximum length will
                           //be number of digits we previously entered.
                        }
                        return false;
                    }
                });
                char t = str.charAt(arg0.length() - 1);
                if (t == '.') {
                    count = 0;
                }
                if (count >= 0) {
                    if (count == 2) {                        
                        InputFilter[] fArray = new InputFilter[1];
                        fArray[0] = new InputFilter.LengthFilter(arg0.length());
                        et.setFilters(fArray);
                        //prevent the edittext from accessing digits 
                        //by setting maximum length as total number of digits we typed till now.
                    }
                    count++;
                }
            }
        }
    });
    

    以上代码不允许用户在小数点后输入超过两位数,您也可以在小数点前输入任意位数。希望对您有所帮助,如果您有任何问题,请告诉我!

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 2011-06-18
      • 2019-08-04
      相关资源
      最近更新 更多