Android EditText,格式为十进制值(3,2)

Android EditText,格式为十进制值(3,2),android,android-edittext,decimalformat,Android,Android Edittext,Decimalformat,我找了很多,但没有找到解决我问题的办法。 我怎样才能有一个编辑文本,用户可以输入十进制格式的数字,格式应该是十进制前的整数和十进制后的两个整数 如果用户输入1,则该值应为1.00,且不允许输入大于9.99的值 我引用了不同的代码,但没有任何功能。 以下是我的密码- public class DecimalDigitsInputFilter implements InputFilter { Pattern mPattern; public DecimalDigitsInput

我找了很多,但没有找到解决我问题的办法。 我怎样才能有一个编辑文本,用户可以输入十进制格式的数字,格式应该是十进制前的整数和十进制后的两个整数

如果用户输入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;
        }

    }


但它允许用户输入所有的值,如333999等。

您想使用
文本观察程序,然后在提交前检查用户键入的内容。下面是要实现的代码示例:

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++;
            }
        }
    }
});
上述代码不允许用户在小数点后输入两位数以上,您也可以在小数点前输入任意位数。希望这有帮助,让我知道如果你有任何问题

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