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

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

不难发现。从字面意思理解我们需实现这个功能就需要在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. * @param str
  5. * @param edtext
  6. * @return sb.toString()
  7. */
  8. public static String addComma(String str,EditText edtext){
  9. touzi_ed_values22 = edtext.getText().toString().trim().replaceAll(",","");
  10. boolean neg = false;
  11. if (str.startsWith("-")){  //处理负数
  12. str = str.substring(1);
  13. neg = true;
  14. }
  15. String tail = null;
  16. if (str.indexOf('.') != -1){ //处理小数点
  17. tail = str.substring(str.indexOf('.'));
  18. str = str.substring(0, str.indexOf('.'));
  19. }
  20. StringBuilder sb = new StringBuilder(str);
  21. sb.reverse();
  22. for (int i = 3; i < sb.length(); i += 4){
  23. sb.insert(i, ',');
  24. }
  25. sb.reverse();
  26. if (neg){
  27. sb.insert(0, '-');
  28. }
  29. if (tail != null){
  30. sb.append(tail);
  31. }
  32. return sb.toString();
  33. }


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

现在就要使用啦!

请直接看代码

   jewelry_money.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!ValueUtils.touzi_ed_values22.equals(jewelry_money.getText().toString().trim().replaceAll(",",""))) {
jewelry_money.setText(ValueUtils.addComma(jewelry_money.getText().toString().trim().replaceAll(",", ""), jewelry_money));
jewelry_money.setSelection(ValueUtils.addComma(jewelry_money.getText().toString().trim().replaceAll(",", ""), jewelry_money).length());
}
} @Override
public void afterTextChanged(Editable s) { }
});

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

 public static String getValue(String str){
String[] s = str.split(",");
String value = "";
for (int i=0;i<s.length;i++){
value += s[i];
}
return value;
}

调用这个方法就可以啦

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

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

这样又有逗号了

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

edittext实现显示千分位格式的更多相关文章

  1. input框输入金额显示千分位

    比如输入:1000000,则显示为1,000,000(或者是保留3位小数:1,000,000.000) 知识点: 1)JavaScript parseFloat() 函数: 定义:parseFloat ...

  2. js从千分位格式

    从千分位格式化谈JS性能优化 http://heeroluo.net/article/detail/115 方法六 // 方法六 function toThousands(num) { ).toStr ...

  3. JavaScript加减计算方法和显示千分位

    Math.formatFloat = function (f, digit) { var m = Math.pow(10, digit); return parseInt(f * m, 10) / m ...

  4. JS返回一个数据的千分位格式

    /** * 价钱转换-从右往左每3位数字加一个逗号 * @param price 需要转换的价格 */ formatPrice(price){ var newPrice = price.split(' ...

  5. js数字格式化千分位格式

    带小数点的 var a = 8462948.2453; console.log(a.toLocaleString()) //8,462,948.245 不带小数点的 num.toString().re ...

  6. sql为数字添加千分位(也就是钱的格式)

    感觉这个东西在项目中用得挺多的,之前在前台页面是用正则来处理,现在由于是数据查询,所以直接在查出数据的时候将其转为指定的千分位格式,省的前台再处理,不讲原理,因为我也看不懂,不过会用就行了,在网上找了 ...

  7. C# 数字带逗号(千分位符、金钱千分位字符)

    首先要明确带了逗号之后  数字就变成字符串了 ,不再是数字了. 昨天做项目的时候需要格式化数字变成带逗号的,本来打算自己写个方法的,后来时间太紧了,就打算从网上查个,查来查去都是要对字符串的位进行操作 ...

  8. C#数字千分位问题

    1.C#中用最简单的方法把数字(不含小数)转换为千分位格式:     如1234567变成1,234,567 方法:1234567.ToString("###,###")   或  ...

  9. js jquery版本的 金额千分位转换函数(非正则,效率极高)

    没想到js里面没有 金额千分位格式化的处理函数(例:1,234.01 这样的格式),网上搜了一圈,都是使用正则的方式处理的.正则的效率不敢恭维啊,又耗费资源速度又慢(虽然处理起来会直观一些). 因此专 ...

随机推荐

  1. ubuntu官方源列表网址

    http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8 (推荐台湾的源)

  2. PC端 $_SERVER 说明

    $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关. $_SERVER['argv'] #传递给该脚本的参数. $_SERVER['argc'] ...

  3. emWin显示文本字符-【worldsing笔记】

    在emWin显示文本字符还是容易的,提供了各种不同的接口,下面是有关于字符显示的常用的用法,可以直接复制到VS2008的模拟ucGui(emWin模拟工程)中运行: 工程代码下载:1.emWin5.2 ...

  4. [置顶] 如何在浏览器中打开PDF文件并实现预览的思路与代码

    编写项目遇到一个需要在浏览器中打开PDF文件的问题.最终实现效果如下: 其实也就是简单的在浏览器中实现一个打开pdf文件,并有类似预览功能的边框. 其实在网上经常见到类似的页面,在浏览器中打开pdf文 ...

  5. ZOJ1648 Circuit Board(线段相交)

    裸的判断线段相交

  6. 如何让label和textblock分成两行

    http://stackoverflow.com/questions/183406/xaml-newline-in-string-attribute http://www.developerfusio ...

  7. linux tail命令的使用方法详解 (转载)

    本文介绍Linux下tail命令的使用方法.linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新 ...

  8. java/android线程池详解

    一,简述线程池: 线程池是如何工作的:一系列任务出现后,根据自己的线程池安排任务进行. 如图: 线程池的好处: 重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销. 能有效控制线程池的最大并 ...

  9. HttpRuntime.Cache 失效

    最近做一个报纸内容类网站,为了提高响应速度,将首页各栏目以及二级栏目中Part文献列表存储在HttpRuntime.Cache缓存中,发布后发现问题,刚插入的缓存很快就失效,本机调试没有问题. 由于H ...

  10. 用java发送邮件(黄海已测试通过)

    /** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...