简体   繁体   English

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

[英]android edittext textwatcher format phone number like xxx-xxx-xx-xx

how to format phone number like xxx-xxx-xx-xx using textwacher tried following code,bt its not working while i delete elements 如何使用textwacher格式化xxx-xxx-xx-xx之类的电话号码尝试以下代码,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) {

            }
        });

finally i did it like this : 最终我做到了这样:

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 MainActivity.class

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

activity_main.xml activity_main.xml

 <EditText
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.6"
        android:visibility="visible"
        android:id="@+id/et_phone_num"
        android:inputType="phone"
        android:maxLength="12"
        android:digits="0123456789"
        android:background="@drawable/phone_edittext_drawable"
        android:gravity="center"
        android:hint="5XX-XXX-XXXX"
        android:imeOptions="actionDone"
        android:textColor="@color/cc" />

Use Masked-EditText library. 使用Masked-EditText库。

Just pass your mask like below. 像下面那样通过你的面具。

<com.github.pinball83.maskededittext.MaskedEditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="number"
    app:mask="xxx-xxx-xx-xx"
    app:notMaskedSymbol="x"
    app:maskIconColor="@color/colorPrimary" />

Note : If you want to remove incorrect number than place your cursor before that digit and enter your right digit this Masked-EditText library will change it. 注意 :如果要删除错误的数字,而不是将光标放在该数字的前面并输入右数字,则Masked-EditText库将对其进行更改。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Android-正则表达式将编辑文本格式化为xxx.xx - Android - Regex to format the edittext as xxx.xx 格式化数字值从 XX.X 到 .XXX java - Format number value from XX.X to .XXX java 从 android 的编辑文本框中获取 XXX-XXX-XXXX 格式的电话号码 - getting phone number in XXX-XXX-XXXX format from edittext box in android 如何在 Android 中创建电话号码格式 XXX-XXX-XXXX - How To Create Phone Number Format XXX-XXX-XXXX In Android 获取表格 DB XXX.0E0(XX 代表数字) - Getting form DB XXX.0E0 ( XX stand for a number) 如何将输入的社会安全号码附加到xxx-xx-1111? - How to append an entered Social Security number to xxx-xx-1111? 如何在地址为46.XXX.XX.XX:8008 /的页面中下载Java Applet类文件 - How to download a java applet class file in a page with an adress like 46.XXX.XX.XX:8008/ javax.net.ssl.SSLPeerUnverifiedException:未验证主机名XX.XXX.XX.XX: - javax.net.ssl.SSLPeerUnverifiedException: Hostname XX.XXX.XX.XX not verified: 格式字符串变为xxx1,xx10或1 ###,10 ##等 - Format String become xxx1, xx10 or 1###, 10## etc NumberFormatException:对于输入字符串:TextField中的“ XXX,XX”,与语言环境相关 - NumberFormatException: For input string: “XXX,XX” in TextField, related to locale
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM