Android 限制Edittext 其中某一位或者最后一位输入X/x;
做项目的时候,需要做会员卡号的输入限制,会员卡号有13位和16位的两种情况,
不论是13位还是16位,其最后一位是检验位(类似身份证),允许输入X(x),但是仅允许其中最后一位可以输入;
代码如下:
member_card_et.addTextChangedListener(new TextWatcher() {
String beforeString = "";
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
MyLog.i(TAG, "beforeTextChanged-s: " + s.toString());
beforeString = member_card_et.getText().toString().trim();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
MyLog.i(TAG, "onTextChanged-s: " + s.toString());
String current = s.toString().replace(beforeString, "");
if (beforeString.length() < 12) {
if (current.toString().equals("X") || current.toString().equals("x")) {
member_card_et.setText(beforeString);
}
} else if (beforeString.length() == 12 && (current.equals("X") || current.equals("x"))) {
member_card_et.setFilters(new InputFilter[]{new InputFilter.LengthFilter(12)});
} else if (beforeString.length() > 12 && beforeString.length() < 15) {
member_card_et.setFilters(new InputFilter[]{new InputFilter.LengthFilter(16)});
if (current.toString().equals("X") || current.toString().equals("x")) {
member_card_et.setText(beforeString);
}
}else {
member_card_et.setFilters(new InputFilter[]{new InputFilter.LengthFilter(16)});
}
member_card_et.setSelection(member_card_et.getText().toString().length());
}
@Override
public void afterTextChanged(Editable s) {
MyLog.i(TAG, "afterTextChanged-s: " + s.toString());
}
});