Android EditText輸入手機號自動空格
阿新 • • 發佈:2019-02-11
開發需求是在登入頁面的手機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());
}
}