android edittext textwatcher格式的电话号码如xxx-xxx-xx-xx

如何格式化电话号码像xxx-xxx-xx-xx使用textwacher尝试下面的代码,bt它不工作,而我删除元素

et_phone_num.addTextChangedListener(new PhoneNumberFormattingTextWatcher()); et_phone_num.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) { et_phone_num.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { MyLog.e("onkeychange","key "+keyCode); if(keyCode == KeyEvent.KEYCODE_DEL) { keyDel = 1; MyLog.e("onkeychange","key 1"); } return false; } }); if (keyDel == 0) { MyLog.e("onkeychange", "if key 0"); int len = et_phone_num.getText().toString().length(); if (len == 3) { et_phone_num.setText(et_phone_num.getText().toString() + "-"); et_phone_num.setSelection(et_phone_num.getText().toString().length()); } else if (len == 7) { et_phone_num.setText(et_phone_num.getText().toString() + "-"); et_phone_num.setSelection(et_phone_num.getText().toString().length()); } else if (len == 10) { et_phone_num.setText(et_phone_num.getText().toString() + "-"); et_phone_num.setSelection(et_phone_num.getText().toString().length()); } } else { MyLog.e("onkeychange", "else key 0"); keyDel = 0; } } @Override public void afterTextChanged(Editable s) { } }); 

最后我做到了这样:

 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); } } } 

MainActivity.class

 et_phone_num = (EditText) findViewById(R.id.et_phone_num); et_phone_num.addTextChangedListener(new PhoneNumberTextWatcher(et_phone_num)); 

activity_main.xml中

   

使用Masked-EditText库。

只需通过你的面具如下。

  

注意 :如果要删除错误的数字而不是将光标放在该数字之前并输入正确的数字,则Masked-EditText库将更改它。