edittext實現顯示千分位格式

來源:互聯網
上載者:User

標籤:

在edittext中你在輸入1123456789過程中自動顯示為1,123,456,789這種千分位格式的。那麼我們該怎麼做呢? 查閱Android edittext api發現它有這樣一個方法addTextChangedListener,這個方法就是用來監聽使用者在輸入過程中的事件監聽,它會重寫這幾個方法:

  1. editText.addTextChangedListener(new TextWatcher() {  
  2.               
  3.             @Override  
  4.             public void onTextChanged(CharSequence s, int start, int before, int count) {  
  5.                 // TODO Auto-generated method stub  
  6.                   
  7.             }  
  8.               
  9.             @Override  
  10.             public void beforeTextChanged(CharSequence s, int start, int count,  
  11.                     int after) {  
  12.                 // TODO Auto-generated method stub  
  13.                   
  14.             }  
  15.               
  16.             @Override  
  17.             public void afterTextChanged(Editable s) {  
  18.                 // TODO Auto-generated method stub  
  19.                
  20.             }  
  21.         });  

不難發現。從字面意思理解我們需實現這個功能就需要在afterTextChanged()這個方法中寫我們的邏輯代碼,代碼如下:

  1. @Override  
  2. ublic void afterTextChanged(Editable s) {  
  3. // TODO Auto-generated method stub  
  4. if (!StringUtils.touzi_ed_values22.equals(editText.getText().toString().trim().replaceAll(",",""))) {  
  5.     editText.setText(StringUtils.addComma(editText.getText().toString().trim().replaceAll(",",""),editText));  
  6.     editText.setSelection(StringUtils.addComma(editText.getText().toString().trim().replaceAll(",",""),editText).length());  
  7. }  


StringUtils.addComma這個方法我是寫成了一個協助類,方便重複調傭

  1.      public static String touzi_ed_values22 = "";  
  2.   
  3.     /**  
  4.      * 在數字型字串千分位加逗號  
  5.      * @param str  
  6.      * @param edtext 
  7.      * @return sb.toString() 
  8.      */    
  9.     public static String addComma(String str,EditText edtext){    
  10.   
  11.         touzi_ed_values22 = edtext.getText().toString().trim().replaceAll(",","");  
  12.           
  13.         boolean neg = false;    
  14.         if (str.startsWith("-")){  //處理負數    
  15.             str = str.substring(1);    
  16.             neg = true;    
  17.         }    
  18.         String tail = null;    
  19.         if (str.indexOf(‘.‘) != -1){ //處理小數點    
  20.             tail = str.substring(str.indexOf(‘.‘));    
  21.             str = str.substring(0, str.indexOf(‘.‘));    
  22.         }    
  23.         StringBuilder sb = new StringBuilder(str);    
  24.         sb.reverse();     
  25.         for (int i = 3; i < sb.length(); i += 4){    
  26.             sb.insert(i, ‘,‘);    
  27.         }    
  28.         sb.reverse();    
  29.         if (neg){    
  30.             sb.insert(0, ‘-‘);    
  31.         }    
  32.         if (tail != null){    
  33.             sb.append(tail);    
  34.         }    
  35.         return sb.toString();    
  36.     }    

代碼中,我定義了一個靜態變數touzi_ed_values22是為了方便與activity中的StringUtils.touzi_ed_values22.equals(editText.getText().toString().trim().replaceAll(",",""))做判斷,判斷在輸入過程中是否不同,也就是數值改變了,如果改變了,那麼就會調用addComma()方法返回新的字串數值賦值給edittext。其中addComma中的touzi_ed_values22 = edtext.getText().toString().trim().replaceAll(",","");非常關鍵。它是為了不斷擷取當前數值與返回後的數值進行比較,如果沒有這句代碼。你的app將再edittext輸入時就會出現卡死現象,因為你的touzi_ed_values22是永遠為空白的。在作比較的時候會進入該方法,就會無限賦值無限判斷。

edittext實現顯示千分位格式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.