我这里介绍两种控制输入方法。
1.(参考链接)
etInputMoney.setFilters(new InputFilter[]{new PointInputFilter()});
public class PointInputFilter implements InputFilter {
private static final int DECIMAL_DIGITS = 2;//小数的位数
private static final int INTEGER_DIGITS = 6;//整数位的位数
private static final int TOTAL_DIGITS = 9; //整数部分 + “小数点” + 小数部分
private int currentLimitDigits = INTEGER_DIGITS;
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
// 删除等特殊字符,直接返回
if ("".equals(source.toString())) {
return null;
}
/*
如果想要直接禁止复制粘贴多个数字,直接这边限制。
if(source.length() > 1){
return "";
}*/
String dValue = dest.toString();
String[] splitArray = dValue.split("\\.");
switch (splitArray.length) {
case 1:
if (dValue.indexOf(".") != -1) {
currentLimitDigits = TOTAL_DIGITS;
} else {
currentLimitDigits = INTEGER_DIGITS;
}
if (source.length() > 1) {
String sValue = source.toString();
String[] subSplitArray = sValue.split("\\.");
switch (subSplitArray.length) {
case 1:
if (source.length() + dest.length() > currentLimitDigits) {
return source.subSequence(0, currentLimitDigits - dest.length());
}
break;
case 2:
String content = "";
if (dstart == dest.length()) {
if (subSplitArray[0].length() + dest.length() > INTEGER_DIGITS) {
content += subSplitArray[0].subSequence(0, INTEGER_DIGITS - dest.length());
} else {
content += subSplitArray[0];
}
if (subSplitArray[1].length() > DECIMAL_DIGITS) {
content += "."+ subSplitArray[1].substring(0, DECIMAL_DIGITS);
} else {
content += "."+ subSplitArray[1];
}
return content;
} else {
if (subSplitArray[0].length() + dest.length() > INTEGER_DIGITS) {
content += subSplitArray[0].subSequence(0, INTEGER_DIGITS - dest.length());
} else {
content += subSplitArray[0];
}
}
return content;
default:
break;
}
}
if (splitArray[0].length() >= currentLimitDigits && !".".equals(source.toString())) {
return "";
}
break;
case 2:
String integerValue = splitArray[0];
String dotValue = splitArray[1];
int dotIndex = dValue.indexOf(".");
if (dstart <= dotIndex) {
if (integerValue.length() >= INTEGER_DIGITS) {
return "";
} else if (source.length() + integerValue.length() >= INTEGER_DIGITS) {
return source.subSequence(0, INTEGER_DIGITS - integerValue.length());
}
} else {
if (dotValue.length() >= DECIMAL_DIGITS) {
return "";
} else if (source.length() + dotValue.length() >= DECIMAL_DIGITS) {
return source.subSequence(0, DECIMAL_DIGITS - dotValue.length());
}
}
break;
default:
break;
}
return null;
}
}
2()
etInputMoney.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (s.toString().contains(".")) {
if (s.length() - 1 - s.toString().indexOf(".") > 2) {
s = s.toString().subSequence(0,
s.toString().indexOf(".") + 3);
etInputMoney.setText(s);
etInputMoney.setSelection(s.length());
}
}
if (s.toString().trim().substring(0).equals(".")) {
s = "0" + s;
etInputMoney.setText(s);
etInputMoney.setSelection(2);
}
if (s.toString().startsWith("0")
&& s.toString().trim().length() > 1) {
if (!s.toString().substring(1, 2).equals(".")) {
etInputMoney.setText(s.subSequence(0, 1));
etInputMoney.setSelection(1);
return;
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
后面还有手机号码,身份证等的限制,请关注后续文章,或给我留言,我会抽时间补充