gpt4 book ai didi

android - 自定义电话号码格式 (XXX-XXX-XXXX) TextWatcher 卡住了

转载 作者:太空狗 更新时间:2023-10-29 16:32:24 26 4
gpt4 key购买 nike

一切正常:我想要在电话号码 EditText 中使用的格式 (XXX-XXX-XXXX) 是有效的。

问题是:删除字符"-"时,不能删除。我卡住了。

enter image description here

PhoneNumberTextWatcher.java

import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;

public class PhoneNumberTextWatcher implements TextWatcher {

private static final String TAG = PhoneNumberTextWatcher.class
.getSimpleName();
private EditText edTxt;
public boolean isDelete;

public PhoneNumberTextWatcher(EditText edTxtPhone) {
this.edTxt = edTxtPhone;
edTxt.setOnKeyListener(new View.OnKeyListener() {

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.KEYCODE_DEL) {
isDelete = true;
LogUtils.Log_e("ISDELETE", String.valueOf(isDelete));
}
return false;
}
});
}
l.substring(6, val.length());
} else if (val.length() > 3 && val.length() < 6) {
b = val.substring(3, val.length());
}
StringBuffer stringBuffer = new StringBuffer();
if (a != null && a.length() > 0) {
stringBuffer.append(a);
if (a.length() == 3) {
stringBuffer.append("-");
}
}
if (b != null && b.length() > 0) {
stringBuffer.append(b);
if (b.length() == 3) {
stringBuffer.append("-");
}
}
if (c != null && c.length() > 0) {
stringBuffer.append(c);
}
edTxt.removeTextChangedListener(this);
edTxt.setText(stringBuffer.toString());
edTxt.setSelection(edTxt.getText().toString().length());
edTxt.addTextChangedListener(this);
} else {
edTxt.removeTextChangedListener(this);
edTxt.setText("");
edTxt.addTextChangedListener(this);
}

}
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}

public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}

public void afterTextChanged(Editable s) {
LogUtils.Log_e("ISDELETE", String.valueOf(isDelete));
if (isDelete) {
isDelete = false;
return;
}
LogUtils.Log_e("ISDELETE", String.valueOf(isDelete));
String val = s.toString();
String a = "";
String b = "";
String c = "";
if (val != null && val.length() > 0) {
val = val.replace("-", "");
if (val.length() >= 3) {
a = val.substring(0, 3);
} else if (val.length() < 3) {
a = val.substring(0, val.length());
}
if (val.length() >= 6) {
b = val.substring(3, 6);
c = val.substring(6, val.length());
} else if (val.length() > 3 && val.length() < 6) {
b = val.substring(3, val.length());
}
StringBuffer stringBuffer = new StringBuffer();
if (a != null && a.length() > 0) {
stringBuffer.append(a);
if (a.length() == 3) {
stringBuffer.append("-");
}
}
if (b != null && b.length() > 0) {
stringBuffer.append(b);
if (b.length() == 3) {
stringBuffer.append("-");
}
}
if (c != null && c.length() > 0) {
stringBuffer.append(c);
}
edTxt.removeTextChangedListener(this);
edTxt.setText(stringBuffer.toString());
edTxt.setSelection(edTxt.getText().toString().length());
edTxt.addTextChangedListener(this);
} else {
edTxt.removeTextChangedListener(this);
edTxt.setText("");
edTxt.addTextChangedListener(this);
}

}
}

我正在尝试 TextWatcher 使用以下代码:

edtOrderCardPhone.addTextChangedListener(new PhoneNumberTextWatcher(edtOrderCardPhone));

参见相关问题 here .谁能帮忙解决问题!

最佳答案

我找到了使用以下代码更改我的 PhoneNumberTextWatcher 的解决方案。

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

public class PhoneNumberTextWatcher implements TextWatcher {

private static final String TAG = "PhoneNumberTextWatcher";
private EditText editText;

public PhoneNumberTextWatcher(EditText edTxtPhone) {
this.editText = edTxtPhone;
}

public void onTextChanged(CharSequence s, int cursorPosition, int before,
int count) {

if (before == 0 && count == 1) { //Entering values

String val = s.toString();
String a = "";
String b = "";
String c = "";
if (val != null && val.length() > 0) {
val = val.replace("-", "");
if (val.length() >= 3) {
a = val.substring(0, 3);
} else if (val.length() < 3) {
a = val.substring(0, val.length());
}
if (val.length() >= 6) {
b = val.substring(3, 6);
c = val.substring(6, val.length());
} else if (val.length() > 3 && val.length() < 6) {
b = val.substring(3, val.length());
}
StringBuffer stringBuffer = new StringBuffer();
if (a != null && a.length() > 0) {
stringBuffer.append(a);

}
if (b != null && b.length() > 0) {
stringBuffer.append("-");
stringBuffer.append(b);

}
if (c != null && c.length() > 0) {
stringBuffer.append("-");
stringBuffer.append(c);
}
editText.removeTextChangedListener(this);
editText.setText(stringBuffer.toString());
if (cursorPosition == 3 || cursorPosition == 7) {
cursorPosition = cursorPosition + 2;
} else {
cursorPosition = cursorPosition + 1;
}
if (cursorPosition <= editText.getText().toString().length()) {
editText.setSelection(cursorPosition);
} else {
editText.setSelection(editText.getText().toString().length());
}
editText.addTextChangedListener(this);
} else {
editText.removeTextChangedListener(this);
editText.setText("");
editText.addTextChangedListener(this);
}

}

if (before == 1 && count == 0) { //Deleting values

String val = s.toString();
String a = "";
String b = "";
String c = "";

if (val != null && val.length() > 0) {
val = val.replace("-", "");
if (cursorPosition == 3) {
val = removeCharAt(val, cursorPosition - 1, s.toString().length() - 1);
} else if (cursorPosition == 7) {
val = removeCharAt(val, cursorPosition - 2, s.toString().length() - 2);
}
if (val.length() >= 3) {
a = val.substring(0, 3);
} else if (val.length() < 3) {
a = val.substring(0, val.length());
}
if (val.length() >= 6) {
b = val.substring(3, 6);
c = val.substring(6, val.length());
} else if (val.length() > 3 && val.length() < 6) {
b = val.substring(3, val.length());
}
StringBuffer stringBuffer = new StringBuffer();
if (a != null && a.length() > 0) {
stringBuffer.append(a);

}
if (b != null && b.length() > 0) {
stringBuffer.append("-");
stringBuffer.append(b);

}
if (c != null && c.length() > 0) {
stringBuffer.append("-");
stringBuffer.append(c);
}
editText.removeTextChangedListener(this);
editText.setText(stringBuffer.toString());
if (cursorPosition == 3 || cursorPosition == 7) {
cursorPosition = cursorPosition - 1;
}
if (cursorPosition <= editText.getText().toString().length()) {
editText.setSelection(cursorPosition);
} else {
editText.setSelection(editText.getText().toString().length());
}
editText.addTextChangedListener(this);
} else {
editText.removeTextChangedListener(this);
editText.setText("");
editText.addTextChangedListener(this);
}

}


}

public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}

public void afterTextChanged(Editable s) {


}

public static String removeCharAt(String s, int pos, int length) {

String value = "";
if (length > pos) {
value = s.substring(pos + 1);
}
return s.substring(0, pos) + value;
}
}

谢谢 B Bhanu Chander对于 solution .

关于android - 自定义电话号码格式 (XXX-XXX-XXXX) TextWatcher 卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35571388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com