![【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android EditText如何實(shí)現(xiàn)每4位自動(dòng)添加空格效果_第1頁(yè)](http://file4.renrendoc.com/view/f6a65cde1d03ea63ad50f8b9ca61a3a6/f6a65cde1d03ea63ad50f8b9ca61a3a61.gif)
![【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android EditText如何實(shí)現(xiàn)每4位自動(dòng)添加空格效果_第2頁(yè)](http://file4.renrendoc.com/view/f6a65cde1d03ea63ad50f8b9ca61a3a6/f6a65cde1d03ea63ad50f8b9ca61a3a62.gif)
![【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android EditText如何實(shí)現(xiàn)每4位自動(dòng)添加空格效果_第3頁(yè)](http://file4.renrendoc.com/view/f6a65cde1d03ea63ad50f8b9ca61a3a6/f6a65cde1d03ea63ad50f8b9ca61a3a63.gif)
![【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android EditText如何實(shí)現(xiàn)每4位自動(dòng)添加空格效果_第4頁(yè)](http://file4.renrendoc.com/view/f6a65cde1d03ea63ad50f8b9ca61a3a6/f6a65cde1d03ea63ad50f8b9ca61a3a64.gif)
![【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android EditText如何實(shí)現(xiàn)每4位自動(dòng)添加空格效果_第5頁(yè)](http://file4.renrendoc.com/view/f6a65cde1d03ea63ad50f8b9ca61a3a6/f6a65cde1d03ea63ad50f8b9ca61a3a65.gif)
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】AndroidEditText如何實(shí)現(xiàn)每4位自動(dòng)添加空格效果
這篇文章主要介紹AndroidEditText如何實(shí)現(xiàn)每4位自動(dòng)添加空格效果,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!基本功能剛拿到需求,很簡(jiǎn)單的一個(gè)功能,二話不說(shuō),很快就出來(lái)了:完美!順利上線!沒(méi)過(guò)幾天領(lǐng)導(dǎo)拿著手機(jī)過(guò)來(lái)說(shuō):“這一堆數(shù)字在一起看著很費(fèi)勁,像其他App一樣,加個(gè)空格吧!”于是就有了這個(gè)demo。拓展功能下面就來(lái)在基本功能上做拓展:每4位,自動(dòng)添加空格??此坪苄〉墓δ埽陂_(kāi)發(fā)的過(guò)程中,遇到了非常多的問(wèn)題與難點(diǎn):EditText輸入框監(jiān)聽(tīng)死循環(huán)輸入框中的空格無(wú)法刪除(刪除又添加)從中間刪除一個(gè)數(shù)字產(chǎn)生的一系列問(wèn)題輸入框光標(biāo)位置的控制問(wèn)題之前踩坑的過(guò)程就不再贅述了,太心酸經(jīng)過(guò)一系列的實(shí)驗(yàn),最后定下來(lái)的思路如下:當(dāng)輸入框的內(nèi)容改變時(shí),就將內(nèi)容取出拆分為一個(gè)一個(gè)的字符,在每4位的中間添加空格,最后一個(gè)4位不能添加。用這種拼接字符的方法是為了解決當(dāng)用戶(hù)刪除中間的數(shù)字,會(huì)導(dǎo)致空格位置錯(cuò)位的問(wèn)題。當(dāng)用戶(hù)刪除中間的字符時(shí),要記錄該動(dòng)作并且記錄光標(biāo)位置,保證重新排序完成后,光標(biāo)的位置在應(yīng)該在的位置。大概就這2步,就可以實(shí)現(xiàn)這個(gè)功能,下面一步一來(lái),我們先實(shí)現(xiàn)空格的添加,保證內(nèi)容永遠(yuǎn)滿(mǎn)足4位后一個(gè)空格:下面先看EditText的監(jiān)聽(tīng):et_credit_number.addTextChangedListener(new
TextWatcher()
{
@Override
public
void
beforeTextChanged(CharSequence
s,
int
start,
int
count,
int
after)
{
}
@Override
public
void
onTextChanged(CharSequence
s,
int
start,
int
before,
int
count)
{
}
@Override
public
void
afterTextChanged(Editable
s)
{
//獲取輸入框中的內(nèi)容,不可以去空格
String
etContent
=
EditTextUtils.getText(et_credit_number);
if
(TextUtils.isEmpty(etContent))
{
bt_submit.setEnabled(false);
return;
}
//重新拼接字符串
String
newContent
=
AppUtils.addSpeaceByCredit(etContent);
//如果有改變,則重新填充
//防止EditText無(wú)限setText()產(chǎn)生死循環(huán)
if
(!etContent.equals(newContent))
{
et_credit_number.setText(newContent);
//保證光標(biāo)在最后,因?yàn)槊看蝧etText都會(huì)導(dǎo)致光標(biāo)重置
//這樣最基本地解決了光標(biāo)亂跳的問(wèn)題
et_credit_number.setSelection(newContent.length());
}
//判斷是否滿(mǎn)足信用卡格式,注意去空格判斷
if
(MatcheUtils.isCreditNumber(newContent.replaceAll("
",
"")))
{
bt_submit.setEnabled(true);
return;
}
bt_submit.setEnabled(false);
}
});沒(méi)有難點(diǎn),重新拼接字符串我單獨(dú)封裝了出來(lái):public
static
String
addSpeaceByCredit(String
content)
{
if
(TextUtils.isEmpty(content))
{
return
"";
}
//去空格
content
=
content.replaceAll("
",
"");
if
(TextUtils.isEmpty(content))
{
return
"";
}
//卡號(hào)限制為16位
if
(content.length()
>
16)
{
content
=
content.substring(0,
16);
}
StringBuilder
newString
=
new
StringBuilder();
for
(int
i
=
1;
i
<=
content.length();
i++)
{
//當(dāng)為第4位時(shí),并且不是最后一個(gè)第4位時(shí)
//拼接字符的同時(shí),拼接一個(gè)空格
//如果在最后一個(gè)第四位也拼接,會(huì)產(chǎn)生空格無(wú)法刪除的問(wèn)題
//因?yàn)橐粍h除,馬上觸發(fā)輸入框改變監(jiān)聽(tīng),又重新生成了空格
if
(i
%
4
==
0
&&
i
!=
content.length())
{
newString.append(content.charAt(i
-
1)
+
"
");
}
else
{
//如果不是4位的倍數(shù),則直接拼接字符即可
newString.append(content.charAt(i
-
1));
}
}
return
newString.toString();
}這里每一步的含義,我都寫(xiě)了注釋?zhuān)瑧?yīng)該問(wèn)題不大,下面運(yùn)行一下:完美!空格正常添加了!但是光標(biāo)亂跳的問(wèn)題,我特地演示了一下。用字符排序的方式來(lái)做這個(gè)功能的原因是這個(gè),當(dāng)用戶(hù)從中間刪除字符時(shí),我們需要將所有添加的空格位置都進(jìn)行審查,并重新進(jìn)行空格的添加,所以我認(rèn)為重新排序字符是非常恰當(dāng)?shù)囊环N做法。當(dāng)然這僅僅是我的愚見(jiàn),可能有更優(yōu)的做法。現(xiàn)在我們就要進(jìn)行第二步,當(dāng)用戶(hù)刪除中間字符時(shí),我們要判斷用戶(hù)本次操作是刪除字符,并且保存本次刪除的光標(biāo)位置,在刪除完成、排序完成之后,將光標(biāo)移動(dòng)到保存的光標(biāo)位置。思路有了,下面就看最終代碼好了。功能展示輸入框監(jiān)聽(tīng)的代碼:et_credit_number.addTextChangedListener(new
TextWatcher()
{
@Override
public
void
beforeTextChanged(CharSequence
s,
int
start,
int
count,
int
after)
{
}
@Override
public
void
onTextChanged(CharSequence
s,
int
start,
int
before,
int
count)
{
//因?yàn)橹匦屡判蛑髎etText的存在
//會(huì)導(dǎo)致輸入框的內(nèi)容從0開(kāi)始輸入,這里是為了避免這種情況產(chǎn)生一系列問(wèn)題
if
(start
==
0
&&
count
>
0)
{
return;
}
String
editTextContent
=
EditTextUtils.getText(et_credit_number);
if
(TextUtils.isEmpty(editTextContent)
||
TextUtils.isEmpty(lastString))
{
return;
}
editTextContent
=
AppUtils.addSpeaceByCredit(editTextContent);
//如果最新的長(zhǎng)度
<
上次的長(zhǎng)度,代表進(jìn)行了刪除
if
(editTextContent.length()
<=
lastString.length())
{
deleteSelect
=
start;
}
else
{
deleteSelect
=
editTextContent.length();
}
}
@Override
public
void
afterTextChanged(Editable
s)
{
//獲取輸入框中的內(nèi)容,不可以去空格
String
etContent
=
EditTextUtils.getText(et_credit_number);
if
(TextUtils.isEmpty(etContent))
{
bt_submit.setEnabled(false);
return;
}
//重新拼接字符串
String
newContent
=
AppUtils.addSpeaceByCredit(etContent);
//保存本次字符串?dāng)?shù)據(jù)
lastString
=
newContent;
//如果有改變,則重新填充
//防止EditText無(wú)限setText()產(chǎn)生死循環(huán)
if
(!etContent.equals(newContent))
{
et_credit_number.setText(newContent);
//保證光標(biāo)的位置
et_credit_number.setSelection(deleteSelect
>
newContent.length()
?
newContent.length()
:
deleteSelect);
}
//判斷是否滿(mǎn)足信用卡格式,注
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度化工廠土地廠房租賃及環(huán)保設(shè)施建設(shè)合同
- 2025年度婚生女撫養(yǎng)權(quán)爭(zhēng)議調(diào)解及財(cái)產(chǎn)分割協(xié)議-@-1
- 2025年度酒店品牌連鎖店擴(kuò)張合作協(xié)議
- 2025年度農(nóng)產(chǎn)品冷鏈物流購(gòu)銷(xiāo)合同質(zhì)量保障與運(yùn)輸安全協(xié)議
- 門(mén)窗相關(guān)行業(yè)投資規(guī)劃報(bào)告范本
- 禮品申請(qǐng)書(shū)范文
- 2025年度高效國(guó)內(nèi)貨物公路運(yùn)輸合同標(biāo)準(zhǔn)文本
- 2025年度臨時(shí)工社會(huì)保險(xiǎn)繳納管理協(xié)議
- 房地產(chǎn)行業(yè)的政策變動(dòng)與未來(lái)影響
- 2025年度智慧城市建設(shè)項(xiàng)目勞務(wù)派遣服務(wù)合同
- 分享二手房中介公司的薪酬獎(jiǎng)勵(lì)制度
- 安徽省2022年中考道德與法治真題試卷(含答案)
- GB 4793-2024測(cè)量、控制和實(shí)驗(yàn)室用電氣設(shè)備安全技術(shù)規(guī)范
- 廣電雙向網(wǎng)改造技術(shù)建議書(shū)
- 項(xiàng)目人員管理方案
- 重大火災(zāi)隱患判定方法
- 2024年電工(高級(jí)技師)考前必刷必練題庫(kù)500題(含真題、必會(huì)題)
- 《證券投資學(xué)》全套教學(xué)課件
- 2024年全國(guó)各地中考語(yǔ)文試題匯編:名著閱讀
- 公司組織架構(gòu)與管理體系制度
- 2024-2030年中國(guó)涂碳箔行業(yè)現(xiàn)狀調(diào)查與投資策略分析研究報(bào)告
評(píng)論
0/150
提交評(píng)論