我的应用程序中有一个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)
提前致谢。
答案 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)});