如何解决从android的edittext框中获取XXX-XXX-XXXX格式的电话号码
|| 你好 我正在编写一个Android,其中用户在编辑文本框中输入电话号码。 我希望数字采用xxx-xxx-xxxx的形式,这意味着\'-\'应该在用户输入前3个字母和另一个\'-\'之后自动出现 我用EditText anum= (EditText)findViewById(R.id.altnum);
anum.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
但是只有在输入所有数字后,它才会格式化。我希望在用户输入数据时进行更改,例如按123时会自动出现连字符
请告诉我该怎么做。
感谢您
此致
钦妮·克里希纳·科萨帕利
解决方法
一种选择是实现自己的InputFilter。
您可以在这里使用我的答案:按“。”很多次(在键入时验证EditText中的ip地址),这里:如何设置Edittext视图仅允许两个数字值和两个十进制值(如##。##),以获取有关如何在键入时解析文本的示例。
如果希望破折号自动显示,则需要将其添加到过滤方法的返回中
,最近,我有同样的要求。我尝试使用TextWatcher。在这里分享,希望以后有人需要。
public class PhoneNumberTextWatcher implements TextWatcher {
private static final String TAG = PhoneNumberTextWatcher.class
.getSimpleName();
private EditText edTxt;
private boolean isDelete;
public PhoneNumberTextWatcher(EditText edTxtPhone) {
this.edTxt = edTxtPhone;
edTxt.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v,int keyCode,KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL) {
isDelete = true;
}
return false;
}
});
}
public void onTextChanged(CharSequence s,int start,int before,int count) {
}
public void beforeTextChanged(CharSequence s,int count,int after) {
}
public void afterTextChanged(Editable s) {
if (isDelete) {
isDelete = false;
return;
}
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);
}
}
}
谢谢
JRH
,以下代码可以添加和删除场景,但是逻辑还需要更长的时间:
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 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,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 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 ;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。