2018/1/31 19:01:21当前位置推荐好文程序员浏览文章

Android EditText输入手机号空格

  • 开发需求是在登录页面的手机EditText中间插入空格,让用户看起来方便点, 130 1234 4567,中间第4个数字和第5个数字空格前面加空格。

  • 要求还有一点,就是除了输入要加入空格,从其他地方复制过来的电话号码,没有空格的,也要在粘贴后,自动补全空格。

  • 思路:重写TextWatcher,每次EditText内容变化,都判断内容是否符合要求。

@Overridepublic void afterTextChanged(Editable s){    //需求是130 1234 4567,中间第4个数字和第5个数字空格前面加空格    StringBuffer sb = new StringBuffer(s);    //StringBuffer.length()是长度,所以下标从1开始    //字符数组第4位如果不是空格字符,就在他前面插一个空格字符    if (s.length() >= 4)    {        char[] chars = s.toString().toCharArray();        //数字下标是从0开始        if (chars[3] !=  )        {            sb.insert(3, );            setContent(sb);        }    }    if (s.length() >= 9)    {        char[] chars = s.toString().toCharArray();        //因为第4位加了一个空格,所以第8位数字,就是字符数组的第9位,下标是8。        if (chars[8] !=  )        {            sb.insert(8, );            setContent(sb);        }    }}
  • 使用,就是把EditText内容监听换成自己写的。
etPhone.addTextChangedListener(new PhoneTextWatcher(etPhone){    @Override    public void afterTextChanged(Editable s)    {        //如果还要做的监听事情,可以继续写        super.afterTextChanged(s);    }});
  • 完整代码,里面有一个别人的方法,就这方法是粘贴时,空格不自动补全:

http://blog.csdn.net/xiongge358/article/details/71750953

/  Created by solexit04 on 2017/9/4.  手机号中间插入空格 / public class PhoneTextWatcher implements TextWatcher{    private EditText editText;    private boolean isDelete;    private int lastContentLength;     public PhoneTextWatcher(EditText editText)    {        this.editText = editText;    }     @Override    public void beforeTextChanged(CharSequence s, int start, int count, int after)    {    }     @Override    public void onTextChanged(CharSequence s, int start, int before, int count)    {       / StringBuffer sb = new StringBuffer(s);        //是否为输入状态        is= s.length() > lastContentLength ? false : true;         //输入是第4,第9位,这时需要插入空格        if (!is&& (s.length() == 4 || s.length() == 9))        {            if (s.length() == 4)            {                sb.insert(3, " ");            } else            {                sb.insert(8, " ");            }            setContent(sb);        }         //删除的位置到4,9时,剔除空格        if (is&& (s.length() == 4 || s.length() == 9))        {            sb.deleteCharAt(sb.length() - 1);            setContent(sb);        }         lastContentLength = sb.length();/    }     @Override    public void afterTextChanged(Editable s)    {        //需求是130 1234 4567,中间第4个数字和第5个数字空格前面加空格        StringBuffer sb = new StringBuffer(s);        //StringBuffer.length()是长度,所以下标从1开始        //字符数组第4位如果不是空格字符,就在他前面插一个空格字符        if (s.length() >= 4)        {            char[] chars = s.toString().toCharArray();            //数字下标是从0开始            if (chars[3] !=  )            {                sb.insert(3, );                setContent(sb);            }        }         if (s.length() >= 9)        {            char[] chars = s.toString().toCharArray();            //因为第4位加了一个空格,所以第8位数字,就是字符数组的第9位,下标是8。            if (chars[8] !=  )            {                sb.insert(8, );                setContent(sb);            }        }    }     /      添加或删除空格EditText的设置     /    private void setContent(StringBuffer sb)    {        editText.setText(sb.toString());        //移动光标到最后面        editText.setSelection(sb.length());    }}
网友评论