从android中的edittext框获取XXX-XXX-XXXX格式的电话号码

嗨,我正在写一个用户在编辑文本框中输入电话号码的机器人。 我希望数字是xxx-xxx-xxxx的forms,这意味着’ – ‘应该在用户输入前3个字母和另一个’ – ‘后自动出现

我使用了EditText anum= (EditText)findViewById(R.id.altnum); anum.addTextChangedListener(new PhoneNumberFormattingTextWatcher()); EditText anum= (EditText)findViewById(R.id.altnum); anum.addTextChangedListener(new PhoneNumberFormattingTextWatcher());

但只有在输入所有数字后才会进入格式。 我希望在用户输入数据时进行更改,如果他按123则应该自动进入,请告诉我该怎么做。

感谢您

此致

ChinniKrishna Kothapalli

一种选择是实现自己的InputFilter 。

你可以在这里使用我的答案: 按“。” 很多次(在键入时validationEditText中的IP地址)和这里: 如何设置Edittext视图只允许两个数值和两个十进制值,如##。##,以获取有关如何在键入时解析文本的示例。

如果您希望自动显示破折号,则需要将它们添加到filter方法的返回中

最近,我有同样的要求。 我用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 start, 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 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 ; } }