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

EditText限制小数点前后位数

时间:2017-10-06 16:22:29      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:height   star   putty   情况   listener   else   lis   private   with   

在EditText输入数字的时候,通常我们需要限制小数点前后位数.比如金额输入一般我们需要限制小数点后面最多2位.我们可以通过 TextWatcher 实现.

 1 public class MyWatcher implements TextWatcher {
 2     private int beforeDot;
 3     private int afterDot;
 4     /**
 5      * 构造器
 6      *
 7      * @param beforeDot 小数点前位数   不限制输入-1
 8      * @param afterDot  小数点后位数   不限制输入-1
 9      */
10     public MyWatcher(int beforeDot, int afterDot) {
11         this.beforeDot = beforeDot;
12         this.afterDot = afterDot;
13     }
14 
15 
16     @Override
17     public void beforeTextChanged(CharSequence s, int start, int count, int after) {
18 
19     }
20 
21     @Override
22     public void onTextChanged(CharSequence s, int start, int before, int count) {
23 
24     }
25 
26     @Override
27     public void afterTextChanged(Editable s) {
28         judge(s);
29     }
30 
31     private void judge(Editable editable) {
32         String temp = editable.toString();
33         int posDot = temp.indexOf(".");
34         //直接输入小数点的情况
35         if (posDot == 0) {
36             editable.insert(0, "0");
37             return;
38         }
39         //连续输入0
40         if (temp.equals("00")) {
41             editable.delete(1, 2);
42             return;
43         }
44         //输入"08" 等类似情况
45         if (temp.startsWith("0") && temp.length() > 1 && (posDot == -1 || posDot > 1)) {
46             editable.delete(0, 1);
47             return;
48         }
49 
50         //不包含小数点 不限制小数点前位数
51         if (posDot < 0 && beforeDot == -1) {
52             //do nothing 仅仅为了理解逻辑而已
53             return;
54         } else if (posDot < 0 && beforeDot != -1) {
55             //不包含小数点 限制小数点前位数
56             if (temp.length() <= beforeDot) {
57                 //do nothing 仅仅为了理解逻辑而已
58             } else {
59                 editable.delete(beforeDot, beforeDot + 1);
60             }
61             return;
62         }
63 
64         //如果包含小数点 限制小数点后位数
65         if (temp.length() - posDot - 1 > afterDot && afterDot != -1) {
66             editable.delete(posDot + afterDot + 1, posDot + afterDot + 2);//删除小数点后多余位数
67         }
68     }
69 }

使用的时候 如下:

<EditText
                    android:id="@+id/et_i_want"
                    android:layout_width="wrap_content"
                    android:layout_height="25dp"
                    android:hint="0.00"
                    android:inputType="numberDecimal"/>
etIWant.addTextChangedListener(new MyWatcher(-1, 2));//限制小数点后最多2位

 

EditText限制小数点前后位数

标签:height   star   putty   情况   listener   else   lis   private   with   

原文地址:http://www.cnblogs.com/ganchuanpu/p/7631675.html

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