码迷,mamicode.com
首页 > 其他好文 > 详细

EditText 自动格式化电话电话号码

时间:2015-04-28 20:39:22      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

需要格式化的格式为:xxx xxxx xxxx

有两种方式:1.为监听当前输入的长度,当长度为第四位,九位的时候,在原内容上追加空格。(from stackOverFlow)2.每次输入后,格式化当前内容。

方式一:

public class PhoneEditText extends EditText implements TextWatcher {

    int beforeLen = 0;
    int afterLen = 0;

    public PhoneEditText(Context context) {
        super(context);
        setInputType(InputType.TYPE_CLASS_PHONE);
        setFilters(new InputFilter[]{new InputFilter.LengthFilter(13)});
        addTextChangedListener(this);
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        beforeLen = s.length();
    }

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

    @Override
    public void afterTextChanged(Editable s) {
        String txt = s.toString();
        if (txt.isEmpty()) return;
        afterLen = s.length();
        if (afterLen > beforeLen) {
            if (afterLen == 4 || afterLen == 9) {
                setText(new StringBuffer(txt).insert(txt.length() - 1, " ").toString());
            }
        } else {
            if (txt.endsWith(" ") && (afterLen == 9 || afterLen == 4)) {
                setText(new StringBuffer(txt).delete(afterLen - 1, afterLen).toString());
            }
        }
        setSelection(afterLen);
    }

    public String getPhoneNumber() {
        CharSequence text = super.getText();
        return text.toString().replaceAll(" ", "");
    }

    public String getOriginalNumber() {
        return getText().toString();
    }
}

  第二种方法:

public class PhoneEditText extends EditText implements TextWatcher {

    public PhoneEditText(Context context) {
        super(context);
        setInputType(InputType.TYPE_CLASS_PHONE);
        setFilters(new InputFilter[]{new InputFilter.LengthFilter(13)});
        addTextChangedListener(this);
    }

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

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

    }

    @Override
    public void afterTextChanged(Editable s) {
        String txt = getPhoneNumber();
        if (txt.isEmpty()) return;
        flag = !flag;
        if (flag) {
            String result = getFormatString(txt);
            setText(result);
            setSelection(result.length());
        }
    }

    boolean flag = false;
    private String getFormatString(String str) {
        String result;
        if (str.length() > 7) {
            result = str.substring(0, 3) + " " + str.substring(3, 7) + " " + str.substring(7, str.length());
        } else if (str.length() > 3) {
            result = str.substring(0, 3) + " " + str.substring(3, str.length());
        } else {
            result = str;
        }
        return result;
    }

    public String getPhoneNumber() {
        CharSequence text = super.getText();
        return text.toString().replaceAll(" ", "");
    }

    public String getOriginalNumber() {
        return getText().toString();
    }
}

  ps:第一种方法如果不按顺序输入,格式化不了。

 

EditText 自动格式化电话电话号码

标签:

原文地址:http://www.cnblogs.com/songsyl1207/p/4463721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!