Android:如何防止用户输入超过3位小数的数字

时间:2014-10-17 11:55:22

标签: android android-layout android-edittext validation

我的应用程序中有一个EditText,我不希望用户输入超过3位小数的数字。这是因为在SQL服务器数据库中要存储从手机发送的数据具有以下数据类型:

numeric(15, 3)

你知道我怎么能这样做吗?

我已经设定了这些值,但它们只会对我有所帮助:

android:maxLength="15"
android:lines="1"
android:inputType="numberDecimal"

修改

这就是我的尝试:

            mQuantityEditText.addTextChangedListener(new TextWatcher(){
        @Override
        public void afterTextChanged(Editable s) {
            String str = mQuantityEditText.getText().toString();
            DecimalFormat format=(DecimalFormat) DecimalFormat.getInstance();
            DecimalFormatSymbols symbols=format.getDecimalFormatSymbols();
            char sep=symbols.getDecimalSeparator();


            int indexOFdec =  str.indexOf(sep);         

            if(indexOFdec >=0) {
               if(str.substring(indexOFdec,str.length()-1).length() >3)
               {
                    s.replace(0, s.length(),str.substring(0, str.length()-1));                    
               }
            }
         }
        @Override
         public void beforeTextChanged(CharSequence s, int start, int count, int after) {

         }
        @Override
         public void onTextChanged(CharSequence s, int start, int before, int count) {                      


         }      
     });

它有效,因为它只允许3位小数,但我仍然不确定如何控制适合numeric(15,3)

的最大位数

提前致谢。

2 个答案:

答案 0 :(得分:0)

  

对于数量有限的角色,您可以添加Android API过滤器:

InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(8);
editEntryView.setFilters(FilterArray);
  

对于数字editText,还有一个阻碍解决方案:

DigitsKeyListener MyDigitKeyListener = new DigitsKeyListener(true, true); 
editEntryView.setKeyListener( MyDigitKeyListener );

答案 1 :(得分:0)

public class RestrictDecimal implements InputFilter {

Pattern mPattern;

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

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

        Matcher matcher=mPattern.mat`enter code here`cher(dest);       
        if(!matcher.matches())
            return "";
        return null;
    }

}

// Set for edit Text
editEntryView.setFilters(new InputFilter[] {new RestrictDecimal(15,3)});