// 成员变量
private TextWatcher textWatcher;
// 初始化:
textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
SFLog.d(TAG, "onTextChanged 被执行---->s=" + s + "----start=" + start
+ "----before=" + before + "----count" + count);
// s为改变之后的字符串,开始位置为start,改变数量为count
if (textWatcher != null) {
// 临时解除监听,防止死循环
et_goods_price.removeTextChangedListener(textWatcher);
}
if (s.length() == 0) {
if (textWatcher != null) {
et_goods_price.addTextChangedListener(textWatcher);
}
return;
}
// 第一个字符不能是小数点
if (s.charAt(0) == '.') {
if (s.length() > 0) {
et_goods_price.setText(s.subSequence(1, s.length()));
} else {
et_goods_price.setText("");
}
}
// 只能有一个小数点
int dotNum = 0;
for (int i = 0, j = s.length(); i < j; i++) {
char letter = s.charAt(i);
if (letter == '.') {
dotNum++;
if (dotNum > 1) {
et_goods_price.setText(s.subSequence(0, start).toString() + s.subSequence(start + count, s.length()).toString());
et_goods_price.setSelection(start);
et_goods_price.addTextChangedListener(textWatcher);
return;
}
}
}
// 只能输入一位小数
if (s.toString().contains(".")) {
int decimalNum = s.toString().subSequence(s.toString().indexOf("."), s.length()).length();
if (decimalNum > 2) {
et_goods_price.setText(s.subSequence(0, start).toString() + s.subSequence(start + count, s.length()).toString());
et_goods_price.setSelection(start);
}
}
if (textWatcher != null) {
et_goods_price.addTextChangedListener(textWatcher);
}
}
@Override
public void afterTextChanged(Editable s) {
resetPrice();
}
}
// 禁止粘贴
et_goods_price.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
});
et_goods_price.addTextChangedListener(textWatcher);
让EditText不能粘贴和不能输入多个小数点(并防止死循环)
最新推荐文章于 2021-03-29 15:52:39 发布