常用方案:
1.在editText的监听addTextChangedListener中逻辑判断
2.使用editText的setFilters(new InputFilter[]),设置输入过滤。
保留小数点后两位方法:
1.设置editTextview的inputtype:
editText.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_CLASS_NUMBER);
2.设置editText的输入过滤
editText.setFilters(new InputFilter[]{new InputFilter() {
int decimalNumber = 2;//小数点后保留位数
@Override
//source:即将输入的内容 dest:原来输入的内容
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String sourceContent = source.toString();
String lastInputContent = dest.toString();
//验证删除等按键
if (TextUtils.isEmpty(sourceContent)) {
return "";
}
//以小数点"."开头,默认为设置为“0.”开头
if (sourceContent.equals(".") && lastInputContent.length() == 0) {
return "0.";
}
//输入“0”,默认设置为以"0."开头
if (sourceContent.equals("0") && lastInputContent.length() == 0) {
return "0.";
}
//小数点后保留两位
if (lastInputContent.contains(".")) {
int index = lastInputContent.indexOf(".");
if (dend - index >= decimalNumber + 1) {
return "";
}
}
return null;
}
}});
3.在editText监听中设置小数点前的位数
editText.addTextChangedListener(new TextWatcher() {
String temp;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
temp = s.toString();
if (TextUtils.equals(unit.getText(), "㎡")) {
int posDot = temp.indexOf(".");
//没有小数点,控制小数点前的位数
if (posDot <= 0) {
if (temp.length() <= 2) {
return;
} else {
//删除第二位后面的内容
s.delete(2, temp.length());
ToastUtil.showShort("测量值填写格式为0.01-99.99");
return;
}
}
if (temp.equals("0.00")) {
//输入“0.00”时清除内容
s.clear();
ToastUtil.showShort("测量值填写格式为整数1-9999");
}
} else {
if (temp.startsWith("0")) {
s.clear();
ToastUtil.showShort("测量值填写格式为整数1-9999");
}
if (temp.length() >= 4) {
s.delete(4, temp.length());
ToastUtil.showShort("测量值填写格式为整数1-9999");
}
}
}
});