精髓一句:
在增加字符的時(shí)候国裳,輸入數(shù)字:count == 1,輸入英文字符鞠苟,count會(huì)等于23456....取決于單詞的長(zhǎng)度鬓照。所以熔酷,只要把判定條件改為:count != 0, 即可。
今天遇到的需求豺裆,也沒問旁邊的前輩拒秘,擼起袖子就開搞了。
每輸入4位數(shù)字自動(dòng)做空格處理,限定輸入框長(zhǎng)度16位躺酒,不包括空格押蚤。
看到這個(gè)需求,想法都是很簡(jiǎn)單的羹应,在TextWatcher中做監(jiān)聽就行了揽碘。不管是直接讓Activity實(shí)現(xiàn)TextWatcher接口也好,還是直接給EditText加上AddTextChangeListener然后new也好量愧。
接著開始搜索一下钾菊,搜索到這么一篇東西:EditText輸入手機(jī)號(hào)自動(dòng)帶空格。他在代碼中很簡(jiǎn)單暴力的就開始使用了一個(gè)StringBuilder對(duì)象偎肃,來實(shí)現(xiàn)追加功能煞烫。
這樣做明顯是不妥的,即使Java有自動(dòng)GC機(jī)制累颂,但是也架不住EditText中的字符每改變一次就new一個(gè)對(duì)象爸拖辍!
然后看了這一篇:[原創(chuàng)]Android實(shí)現(xiàn)輸入手機(jī)號(hào)時(shí)自動(dòng)添加空格
在這篇博文中的代碼相對(duì)靠譜紊馏。
public void onTextChanged(CharSequence s, int start, int before, int count) {
DLog.d("----------onTextChanged----------\n");
DLog.d("s:" + s + "\n");
DLog.d("start:" + start + "\n");
DLog.d("before:" + before + "\n");
DLog.d("count:" + count + "\n");
if (count == 1){
int length = s.toString().length();
if (length == 3 || length == 8){
editText.setText(s + " ");
editText.setSelection(editText.getText().toString().length());
}
}
}
修改之后料饥,旁邊的前輩說他之前也寫過這個(gè)。不過最后因?yàn)楣鈽?biāo)會(huì)跳朱监,而且還沒有解決岸啡。
原代碼我已經(jīng)刪了,這里就不貼出來了赫编。
然后我開始去看他寫的巡蘸,并將我寫的加入到之前的代碼之中。
這個(gè)時(shí)候發(fā)現(xiàn)了一個(gè)BUG:在原生模擬器之中擂送,輸入法會(huì)自動(dòng)將輸入的英文字符拼接成為一個(gè)單詞悦荒,這個(gè)時(shí)候,這個(gè)方法會(huì)失效嘹吨。
接著我開始Debug搬味,最后發(fā)現(xiàn)。在增加字符的時(shí)候蟀拷,輸入數(shù)字:count == 1, 輸入英文字符碰纬,count 會(huì)等于23456....取決于單詞的長(zhǎng)度。
所以问芬,只要把判定條件改為:count != 0, 即可嘀趟。
我的最終源碼:
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (count != 0) {
int length = s.length() + 1;
if (length % 5 == 0 && length < 20) {
edx.setText(s + " ");
edx.setSelection(length);
}
}
}