格式
numeric(7,2)
共7位,小数点后2位,小数点前5位
校验
NumberDecimalVerification
package util;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
/**
* Created on 2018/7/17.
*
* @desc 小数校验
*/
public class NumberDecimalVerification implements TextWatcher {
private EditText editText;
/**
* 小数点前长
*/
private int beforeDotLengthReceive;
/**
* 小数点后长
*/
private int afterDotLengthReceive;
/**
* constructor
*
* @param editText 控件
* @param beforeDotLength 小数点前长
* @param afterDotLength 小数点后长
*/
public NumberDecimalVerification(EditText editText, int beforeDotLength, int afterDotLength) {
this.editText = editText;
this.beforeDotLengthReceive = beforeDotLength;
this.afterDotLengthReceive = afterDotLength;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
verification(editable, editText);
}
/**
* 校验
*
* @param editable editable
*/
private void verification(Editable editable, EditText editText) {
String temporary = editable.toString();
// 字符串指定字符头次现索引
int posDot = temporary.indexOf(".");
// 光标位
int index = editText.getSelectionStart();
if (posDot == 0) {
// 输数字后输小数点(否删所有字符)
editable.delete(0, temporary.length());
return;
}
if (posDot < 0) {
// 无小数点
if (temporary.length() <= beforeDotLengthReceive) {
// 小于beforeDotLengthReceive位直返
return;
} else {
// 删光标前字符
editable.delete(index - 1, index);
return;
}
}
if (posDot > beforeDotLengthReceive) {
// 小数点前大于beforeDotLengthReceive位删光标前一位
editable.delete(index - 1, index);
return;
}
if (temporary.length() - posDot - 1 > afterDotLengthReceive) {
// 有小数点删光标前字符
editable.delete(index - 1, index);
}
}
}
主代码
editText.addTextChangedListener(new NumberDecimalVerification(editText, 5, 2));