int beforeDecimalNum = 8;
int afterDecimalNum = 2;
int maxLength = 11;
etElectricityMeter.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
DecimalInputFilter decimalInputFilter = new DecimalInputFilter(beforeDecimalNum, afterDecimalNum);
InputFilter[] inputFilter = {new InputFilter.LengthFilter(maxLength), decimalInputFilter};
etElectricityMeter.setFilters(inputFilter);
etElectricityMeter.addTextChangedListener(new DecimalTextWatcher(etElectricityMeter, afterDecimalNum));
import android.text.InputFilter;
import android.text.Spanned;
public class DecimalInputFilter implements InputFilter {
private static final String TAG = DecimalInputFilter.class.getSimpleName();
private int beforeDecimalNum;
private int afterDecimalNum;
public DecimalInputFilter(int beforeDecimalNum, int afterDecimalNum) {
this.beforeDecimalNum = beforeDecimalNum;
this.afterDecimalNum = afterDecimalNum;
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String beforeData = dest.toString();
String inputData = source.toString();
if (source.length() == 0 && dend > dstart) {
return null;
} else {
if (beforeData.contains(".")) {
String[] beforeDataArr = beforeData.split("\.");
if (beforeDataArr.length > 1 && beforeDataArr[0].length() >= beforeDecimalNum && beforeDataArr[1].length() >= afterDecimalNum) {
return "";
} else if (beforeDataArr.length >= 1 && beforeDataArr[0].length() >= beforeDecimalNum && dstart <= beforeDecimalNum) {
return "";
} else if (beforeDataArr.length > 1 && beforeDataArr[1].length() >= afterDecimalNum && dend >= beforeDecimalNum) {
return "";
}
} else {
if (beforeData.length() >= beforeDecimalNum && !inputData.equals(".")) {
return "";
}
}
}
return null;
}
}
import android.text.Editable
import android.text.TextUtils
import android.text.TextWatcher
import android.widget.EditText
public class DecimalTextWatcher implements TextWatcher {
private static final String TAG = DecimalTextWatcher.class.getSimpleName()
private String beforeData
private String[] beforeDataArr
private EditText editText
//小数点后边几位
private int afterDecimalNum
// private OnCommonSingleParamCallback<String> onCommonSingleParamCallback
private int index
public DecimalTextWatcher(EditText editText, int afterDecimalNum) {
this.editText = editText
this.afterDecimalNum = afterDecimalNum
}
// public DecimalTextWatcher(EditText editText, int afterDecimalNum, OnCommonSingleParamCallback<String> onCommonSingleParamCallback) {
// this.editText = editText
// this.afterDecimalNum = afterDecimalNum
// this.onCommonSingleParamCallback = onCommonSingleParamCallback
// }
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
beforeData = s.toString()
beforeDataArr = null
if (!TextUtils.isEmpty(beforeData) && beforeData.contains(".")) {
beforeDataArr = beforeData.split("\.")
}
index = editText.getSelectionStart()
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String afterData = s.toString()
editText.removeTextChangedListener(this)
if (afterData.contains(".") && afterData.length() > 1) {
if (beforeDataArr != null && beforeDataArr.length > 1) {
for (int i = 0
if (afterData.contains(beforeDataArr[i])) {
String[] afterDataArr = afterData.split("\.")
if (afterDataArr != null && afterDataArr.length > 1 && afterDataArr[1].length() > afterDecimalNum) {
if (index >= afterDataArr[0].length()) {
s.delete(index, index + 1)
}
break
}
}
}
}
}
editText.addTextChangedListener(this)
// afterData = s.toString()
// if (!TextUtils.isEmpty(afterData)) {
// onCommonSingleParamCallback.onSuccess(afterData)
// } else {
// onCommonSingleParamCallback.onError("")
// }
}
}