我有代码在第 5 个和第 12 个数字后添加破折号,但是在删除这些数字时,按退格键后破折号不会被删除。 删除最后一位数字后就卡住了。
这是我从堆栈链接之一实现的代码。
EditText Cnic;
int maxLength = 15;
int len =0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Cnic = (EditText)findViewById(R.id.cnic_edtext);
Cnic.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLength)});
Cnic.addTextChangedListener(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) {
String str = s.toString();
if(s.length() == 5 || s.length() == 13){
str += "-";
Cnic.setText(str);
Cnic.setSelection(str.length());
}
}
@Override
public void afterTextChanged(Editable s) {
String str = s.toString();
len = str.length();
}
});
}
最佳答案
我记得不久前尝试过做类似的事情。您首先要做的是检查对文本所做的更改是否为删除。您还必须将 EditText 的文本设置为原始文本的子字符串,这样“-”就不再是其中的一部分。我对下面的代码进行了更改。
检查下面的代码,如果您有任何其他问题,请在下面评论。
int length = 0;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
length = Cnic.getText().toString().length();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
int new_length = Cnic.getText().toString().length();
//The length has decreased, meaning that something was deleted.
if(length > new_length){
String str = s.toString();
if(s.length() == 5 || s.length() == 13){
//This sets the text to what was in the EditText, except it excludes the '-'
Cnic.setText(str.subString(0, s.length()-2));
Cnic.setSelection(str.length());
}
}else{
//The action that happened was not a delete, so just add the dashes to the text.
String str = s.toString();
if(s.length() == 5 || s.length() == 13){
str += "-";
Cnic.setText(str);
Cnic.setSelection(str.length());
}
}
}
@Override
public void afterTextChanged(Editable s) {
String str = s.toString();
len = str.length();
}
如果这不起作用,请尝试将 onTextChanged 中的代码放入 afterTextChanged 中,看看是否有效。我认为这个答案应该有效。
关于java - 从背面的字符串中删除破折号或删除键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53237636/