600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > edittext再输入过程中显示金额千分位格式

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

时间:2019-05-13 04:32:23

相关推荐

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

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

editText.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {// TODO Auto-generated method stub}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {// TODO Auto-generated method stub}@Overridepublic void afterTextChanged(Editable s) {// TODO Auto-generated method stub}});

不难发现。从字面意思理解我们需实现这个功能就需要在afterTextChanged()这个方法中写我们的逻辑代码,代码如下:

@Overridepublic void afterTextChanged(Editable s) {// TODO Auto-generated method stubif (!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是永远为空的。在作比较的时候会进入该方法,就会无限赋值无限判断。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。