码迷,mamicode.com
首页 > 其他好文 > 详细

edittext实现显示千分位格式

时间:2016-08-10 18:54:52      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

在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实现显示千分位格式

标签:

原文地址:http://www.cnblogs.com/wangying222/p/5757672.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!