edittext再输入过程中显示金额千分位格式

在edittext中你在输入1123456789过程中自动显示为1,123,456,789这种千分位格式的。那么我们该怎么做呢? 查阅Android edittext api发现它有这样一个方法addTextChangedListener,这个方法就是用来监听用户在输入过程中的事件监听,它会重写这几个方法:

editText.addTextChangedListener(new TextWatcher() {
            
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
             
            }
        });
不难发现。从字面意思理解我们需实现这个功能就需要在afterTextChanged()这个方法中写我们的逻辑代码,代码如下:

   @Override
		public void afterTextChanged(Editable s) {
			// TODO Auto-generated method stub
			if (!StringUtils.touzi_ed_values22.equals(editText.getText().toString().trim().replaceAll(",",""))) {
				editText.setText(StringUtils.addComma(editText.getText().toString().trim().replaceAll(",",""),editText));
				editText.setSelection(StringUtils.addComma(editText.getText().toString().trim().replaceAll(",",""),editText).length());
			}
		}

StringUtils.addComma这个方法我是写成了一个帮助类,方便重复调佣

     public static String touzi_ed_values22 = "";

    /** 
     * 在数字型字符串千分位加逗号 
     * @param str 
     * @param edtext
     * @return sb.toString()
     */  
    public static String addComma(String str,EditText edtext){  

        touzi_ed_values22 = edtext.getText().toString().trim().replaceAll(",","");
        
        boolean neg = false;  
        if (str.startsWith("-")){  //处理负数  
            str = str.substring(1);  
            neg = true;  
        }  
        String tail = null;  
        if (str.indexOf('.') != -1){ //处理小数点  
            tail = str.substring(str.indexOf('.'));  
            str = str.substring(0, str.indexOf('.'));  
        }  
        StringBuilder sb = new StringBuilder(str);  
        sb.reverse();   
        for (int i = 3; i < sb.length(); i += 4){  
            sb.insert(i, ',');  
        }  
        sb.reverse();  
        if (neg){  
            sb.insert(0, '-');  
        }  
        if (tail != null){  
            sb.append(tail);  
        }  
        return sb.toString();  
    }  


代码中,我定义了一个静态的变量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是永远为空的。在作比较的时候会进入该方法,就会无限赋值无限判断。


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值