Android EditText,格式为十进制值(3,2)
我找了很多,但没有找到解决我问题的办法。 我怎样才能有一个编辑文本,用户可以输入十进制格式的数字,格式应该是十进制前的整数和十进制后的两个整数 如果用户输入1,则该值应为1.00,且不允许输入大于9.99的值 我引用了不同的代码,但没有任何功能。 以下是我的密码-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
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++;
}
}
}
});