zoukankan      html  css  js  c++  java
  • edittext实现显示千分位格式

    在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是永远为空的。在作比较的时候会进入该方法,就会无限赋值无限判断。

    现在就要使用啦!

    请直接看代码

     1   jewelry_money.addTextChangedListener(new TextWatcher() {
     2             @Override
     3             public void beforeTextChanged(CharSequence s, int start, int count, int after) {
     4 
     5             }
     6 
     7             @Override
     8             public void onTextChanged(CharSequence s, int start, int before, int count) {
     9                 if (!ValueUtils.touzi_ed_values22.equals(jewelry_money.getText().toString().trim().replaceAll(",",""))) {
    10                     jewelry_money.setText(ValueUtils.addComma(jewelry_money.getText().toString().trim().replaceAll(",", ""), jewelry_money));
    11                     jewelry_money.setSelection(ValueUtils.addComma(jewelry_money.getText().toString().trim().replaceAll(",", ""), jewelry_money).length());
    12                 }
    13             }
    14 
    15             @Override
    16             public void afterTextChanged(Editable s) {
    17 
    18             }
    19         });

    最后在给大家一个小工具,有时候上传价格的数据时,不允许上传带逗号的,所以在上传之前要去掉逗号啦!

    1 public static String getValue(String str){
    2         String[] s = str.split(",");
    3         String value = "";
    4         for (int i=0;i<s.length;i++){
    5             value += s[i];
    6         }
    7         return value;
    8     }

    调用这个方法就可以啦

    到时在获取数据展示的时候又要加逗号,可以这样解决

     1  HttpUtil.post(this, UrlConfig.JEWELRY_DETAIL, params, new HttpUtil.Ok() {
     2             @Override
     3             public void success(String str) {
     4                 JSONObject data = JSON.parseObject(str);
     5                 show_jewelry_name.setText(Helper.value(data.getString("sellerName"), "未知"));
     6                 show_jewelry_ID.setText(Helper.value(data.getString("sellerId"), "未知"));
     7                 show_jewelry_phone.setText(Helper.value(data.getString("sellerTel"), "未知"));
     8                 java.text.NumberFormat nf = java.text.NumberFormat.getInstance();
     9                 Double value=data.getDouble("price");
    10                 show_jewelry_money.setText(nf.format(value)+"元");

    这样又有逗号了

    哈哈,这才真正的解决了数字的千分位问题

  • 相关阅读:
    Orcle 导入数据eurusd.ctl
    Maven系列2pom.xml 配置详解
    UML关联&泛化的区别
    maven 创建工程
    maven 打包
    jprofiler安装和配置
    设计模式出现之前的几大原则
    检查启动情况linux
    领域模型
    解压命令tar
  • 原文地址:https://www.cnblogs.com/wangying222/p/5757672.html
Copyright © 2011-2022 走看看