EditText限制小数点前后位数

Posted 安卓笔记侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EditText限制小数点前后位数相关的知识,希望对你有一定的参考价值。

在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限制小数点前后位数的主要内容,如果未能解决你的问题,请参考以下文章

Android Edittext限制输入小数位数,限制输入数字大小及所有相关式样与属性(总结)

限定EditText小数位数

EditText 设置最大小数位数

如何限制用户输入EditText(Xamarin.Android)中小数点分隔符后的最大2位或3位数?

如何限制 EditText 输入只允许 3 位整数或小数

JS 正则匹配整数和小数