Android實(shí)現(xiàn) EditText輸入手機(jī)號(hào)空格功能
Android EditText輸入手機(jī)號(hào)空格
- 開發(fā)需求是在登錄頁(yè)面的手機(jī)EditText中間插入空格,讓用戶看起來(lái)方便點(diǎn), 130 1234 4567,中間第4個(gè)數(shù)字和第5個(gè)數(shù)字空格前面加空格。
- 要求還有一點(diǎn),就是除了輸入要加入空格,從其他地方復(fù)制過(guò)來(lái)的電話號(hào)碼,沒(méi)有空格的,也要在粘貼后,自動(dòng)補(bǔ)全空格。
- 思路:重寫TextWatcher,每次EditText內(nèi)容變化,都判斷內(nèi)容是否符合要求。
@Override
public void afterTextChanged(Editable s)
{
//需求是130 1234 4567,中間第4個(gè)數(shù)字和第5個(gè)數(shù)字空格前面加空格
StringBuffer sb = new StringBuffer(s);
//StringBuffer.length()是長(zhǎng)度,所以下標(biāo)從1開始
//字符數(shù)組第4位如果不是空格字符,就在他前面插一個(gè)空格字符
if (s.length() >= 4)
{
char[] chars = s.toString().toCharArray();
//數(shù)字下標(biāo)是從0開始
if (chars[3] != ' ')
{
sb.insert(3,' ');
setContent(sb);
}
}
if (s.length() >= 9)
{
char[] chars = s.toString().toCharArray();
//因?yàn)榈?位加了一個(gè)空格,所以第8位數(shù)字,就是字符數(shù)組的第9位,下標(biāo)是8。
if (chars[8] != ' ')
{
sb.insert(8,' ');
setContent(sb);
}
}
}
使用,就是把EditText內(nèi)容監(jiān)聽換成自己寫的。
etPhone.addTextChangedListener(new PhoneTextWatcher(etPhone)
{
@Override
public void afterTextChanged(Editable s)
{
//如果還要做的監(jiān)聽事情,可以繼續(xù)寫
super.afterTextChanged(s);
}
});
完整代碼,里面有一個(gè)別人的方法,就這方法是粘貼時(shí),空格不自動(dòng)補(bǔ)全:
http://www.dhdzp.com/article/134183.htm
/**
* Created by solexit04 on 2017/9/4.
* 手機(jī)號(hào)中間插入空格
*/
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);
//是否為輸入狀態(tài)
isDelete = s.length() > lastContentLength ? false : true;
//輸入是第4,第9位,這時(shí)需要插入空格
if (!isDelete && (s.length() == 4 || s.length() == 9))
{
if (s.length() == 4)
{
sb.insert(3, " ");
} else
{
sb.insert(8, " ");
}
setContent(sb);
}
//刪除的位置到4,9時(shí),剔除空格
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個(gè)數(shù)字和第5個(gè)數(shù)字空格前面加空格
StringBuffer sb = new StringBuffer(s);
//StringBuffer.length()是長(zhǎng)度,所以下標(biāo)從1開始
//字符數(shù)組第4位如果不是空格字符,就在他前面插一個(gè)空格字符
if (s.length() >= 4)
{
char[] chars = s.toString().toCharArray();
//數(shù)字下標(biāo)是從0開始
if (chars[3] != ' ')
{
sb.insert(3,' ');
setContent(sb);
}
}
if (s.length() >= 9)
{
char[] chars = s.toString().toCharArray();
//因?yàn)榈?位加了一個(gè)空格,所以第8位數(shù)字,就是字符數(shù)組的第9位,下標(biāo)是8。
if (chars[8] != ' ')
{
sb.insert(8,' ');
setContent(sb);
}
}
}
/**
* 添加或刪除空格EditText的設(shè)置
*/
private void setContent(StringBuffer sb)
{
editText.setText(sb.toString());
//移動(dòng)光標(biāo)到最后面
editText.setSelection(sb.length());
}
}
總結(jié)
以上所述是小編給大家介紹的Android實(shí)現(xiàn) EditText輸入手機(jī)號(hào)空格功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Android自定義FloatingText仿點(diǎn)贊+1特效
這篇文章主要為大家詳細(xì)介紹了Android自定義FloatingText仿點(diǎn)贊+1特效,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Android實(shí)現(xiàn)MVVM架構(gòu)數(shù)據(jù)刷新詳解流程
MVVM架構(gòu)模式,即Model-View-ViewModel三個(gè)層級(jí),MVVM模式出來(lái)的時(shí)間已經(jīng)很長(zhǎng)了,網(wǎng)上關(guān)于MVVM模式的解析也有很多,我這里只說(shuō)一下我自己的理解,基本上是和MVP模式相比較的一個(gè)差異2021-10-10
Android Coil對(duì)比Glide深入分析探究
這篇文章主要介紹了Android Coil對(duì)比Glide,Coil是Android上的一個(gè)全新的圖片加載框架,它的全名叫做coroutine image loader,即協(xié)程圖片加載庫(kù)2023-02-02
Android之ProgressBar即時(shí)顯示下載進(jìn)度詳解
這篇文章主要為大家詳細(xì)介紹了Android之ProgressBar即時(shí)顯示下載進(jìn)度,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
Android TextView使用SpannableString設(shè)置復(fù)合文本的方法詳解
這篇文章主要介紹了Android TextView使用SpannableString設(shè)置復(fù)合文本的方法,結(jié)合實(shí)例形式詳細(xì)分析了Android中SpannableString類的功能及相關(guān)用法,需要的朋友可以參考下2016-08-08
Android 照相機(jī)的實(shí)例應(yīng)用
這篇文章主要介紹了Android 照相機(jī)的實(shí)例應(yīng)用的相關(guān)資料,希望通過(guò)此文能掌握Android照相機(jī)的使用方法,需要的朋友可以參考下2017-08-08

