1. 程式人生 > >Android EditText輸入手機號自動空格

Android EditText輸入手機號自動空格

  • 開發需求是在登入頁面的手機EditText中間插入空格,讓使用者看起來方便點, 130 1234 4567,中間第4個數字和第5個數字空格前面加空格。

  • 要求還有一點,就是除了輸入要加入空格,從其他地方複製過來的電話號碼,沒有空格的,也要在粘貼後,自動補全空格。

  • 思路:重寫TextWatcher,每次EditText內容變化,都判斷內容是否符合要求。

@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內容監聽換成自己寫的。
etPhone.addTextChangedListener(new PhoneTextWatcher(etPhone)
{
    @Override
    public void afterTextChanged(Editable s)
    {
        //如果還要做的監聽事情,可以繼續寫
        super
.afterTextChanged(s); } });
  • 完整程式碼,裡面有一個別人的方法,就這方法是貼上時,空格不自動補全:
/**
 * 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);
        //是否為輸入狀態
        isDelete = s.length() > lastContentLength ? false : true;
 
        //輸入是第4,第9位,這時需要插入空格
        if (!isDelete && (s.length() == 4 || s.length() == 9))
        {
            if (s.length() == 4)
            {
                sb.insert(3, " ");
            } else
            {
                sb.insert(8, " ");
            }
            setContent(sb);
        }
 
        //刪除的位置到4,9時,剔除空格
        if (isDelete && (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());
    }
}