bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

Android如何實現EditText每4位自動添加空格效果-創新互聯

這篇文章主要為大家展示了“Android如何實現EditText每4位自動添加空格效果”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Android如何實現EditText每4位自動添加空格效果”這篇文章吧。

成都創新互聯公司從2013年成立,是專業互聯網技術服務公司,擁有項目成都網站建設、成都做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元尚志做網站,已為上家服務,為尚志各地企業和個人服務,聯系電話:13518219792

思路如下:

當輸入框的內容改變時,就將內容取出拆分為一個一個的字符,在每4位的中間添加空格,最后一個4位不能添加。用這種拼接字符的方法是為了解決當用戶刪除中間的數字,會導致空格位置錯位的問題。  當用戶刪除中間的字符時,要記錄該動作并且記錄光標位置,保證重新排序完成后,光標的位置在應該在的位置。

大概就這2步,就可以實現這個功能,下面一步一來,我們先實現空格的添加,保證內容永遠滿足4位后一個空格:

下面先看EditText的監聽:

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) {  //獲取輸入框中的內容,不可以去空格  String etContent = EditTextUtils.getText(et_credit_number);  if (TextUtils.isEmpty(etContent)) {   bt_submit.setEnabled(false);   return;  }  //重新拼接字符串  String newContent = AppUtils.addSpeaceByCredit(etContent);  //如果有改變,則重新填充  //防止EditText無限setText()產生死循環  if (!etContent.equals(newContent)) {   et_credit_number.setText(newContent);   //保證光標在最后,因為每次setText都會導致光標重置   //這樣最基本地解決了光標亂跳的問題   et_credit_number.setSelection(newContent.length());  }  //判斷是否滿足信用卡格式,注意去空格判斷  if (MatcheUtils.isCreditNumber(newContent.replaceAll(" ", ""))) {   bt_submit.setEnabled(true);   return;  }  bt_submit.setEnabled(false); }});

沒有難點,重新拼接字符串我單獨封裝了出來:

public static String addSpeaceByCredit(String content) { if (TextUtils.isEmpty(content)) {  return ""; } //去空格 content = content.replaceAll(" ", ""); if (TextUtils.isEmpty(content)) {  return ""; } //卡號限制為16位 if (content.length() > 16) {  content = content.substring(0, 16); } StringBuilder newString = new StringBuilder(); for (int i = 1; i <= content.length(); i++) {  //當為第4位時,并且不是最后一個第4位時  //拼接字符的同時,拼接一個空格  //如果在最后一個第四位也拼接,會產生空格無法刪除的問題  //因為一刪除,馬上觸發輸入框改變監聽,又重新生成了空格  if (i % 4 == 0 && i != content.length()) {   newString.append(content.charAt(i - 1) + " ");  } else {  //如果不是4位的倍數,則直接拼接字符即可   newString.append(content.charAt(i - 1));  } } return newString.toString();}

這里每一步的含義,我都寫了注釋,應該問題不大,下面運行一下:

完美!空格正常添加了!

但是光標亂跳的問題,我特地演示了一下。

用字符排序的方式來做這個功能的原因是這個,當用戶從中間刪除字符時,我們需要將所有添加的空格位置都進行審查,并重新進行空格的添加,所以我認為重新排序字符是非常恰當的一種做法。當然這僅僅是我的愚見,可能有更優的做法。

現在我們就要進行第二步,當用戶刪除中間字符時,我們要判斷用戶本次操作是刪除字符,并且保存本次刪除的光標位置,在刪除完成、排序完成之后,將光標移動到保存的光標位置。

思路有了,下面就看最終代碼好了。

輸入框監聽的代碼:

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) {  //因為重新排序之后setText的存在  //會導致輸入框的內容從0開始輸入,這里是為了避免這種情況產生一系列問題  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);  //如果新的長度 < 上次的長度,代表進行了刪除  if (editTextContent.length() <= lastString.length()) {   deleteSelect = start;  } else {   deleteSelect = editTextContent.length();  } } @Override public void afterTextChanged(Editable s) {  //獲取輸入框中的內容,不可以去空格  String etContent = EditTextUtils.getText(et_credit_number);  if (TextUtils.isEmpty(etContent)) {   bt_submit.setEnabled(false);   return;  }  //重新拼接字符串  String newContent = AppUtils.addSpeaceByCredit(etContent);  //保存本次字符串數據  lastString = newContent;  //如果有改變,則重新填充  //防止EditText無限setText()產生死循環  if (!etContent.equals(newContent)) {   et_credit_number.setText(newContent);   //保證光標的位置   et_credit_number.setSelection(deleteSelect > newContent.length() ? newContent.length() : deleteSelect);  }  //判斷是否滿足信用卡格式,注意去空格判斷  if (MatcheUtils.isCreditNumber(newContent.replaceAll(" ", ""))) {   bt_submit.setEnabled(true);   return;  }  bt_submit.setEnabled(false); }});

這邊主要利用了onTextChanged()的監聽,判斷用戶操作是刪除操作時,保存光標的位置。

以上是“Android如何實現EditText每4位自動添加空格效果”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯行業資訊頻道!

本文題目:Android如何實現EditText每4位自動添加空格效果-創新互聯
URL標題:http://vcdvsql.cn/article30/cdsjpo.html

成都網站建設公司_創新互聯,為您提供App設計虛擬主機品牌網站設計軟件開發網站營銷營銷型網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計