EditText限制小数点前后位数

来源:互联网 发布:单片机的外部复位电路 编辑:程序博客网 时间:2024/05/18 00:18

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

复制代码
public class MyWatcher implements TextWatcher {    private int beforeDot;    private int afterDot;    /**     * 构造器     *     * @param beforeDot 小数点前位数   不限制输入-1     * @param afterDot  小数点后位数   不限制输入-1     */    public MyWatcher(int beforeDot, int afterDot) {        this.beforeDot = beforeDot;        this.afterDot = afterDot;    }    @Override    public void beforeTextChanged(CharSequence s, int start, int count, int after) {    }    @Override    public void onTextChanged(CharSequence s, int start, int before, int count) {    }    @Override    public void afterTextChanged(Editable s) {        judge(s);    }    private void judge(Editable editable) {        String temp = editable.toString();        int posDot = temp.indexOf(".");        //直接输入小数点的情况        if (posDot == 0) {            editable.insert(0, "0");            return;        }        //连续输入0        if (temp.equals("00")) {            editable.delete(1, 2);            return;        }        //输入"08" 等类似情况        if (temp.startsWith("0") && temp.length() > 1 && (posDot == -1 || posDot > 1)) {            editable.delete(0, 1);            return;        }        //不包含小数点 不限制小数点前位数        if (posDot < 0 && beforeDot == -1) {            //do nothing 仅仅为了理解逻辑而已            return;        } else if (posDot < 0 && beforeDot != -1) {            //不包含小数点 限制小数点前位数            if (temp.length() <= beforeDot) {                //do nothing 仅仅为了理解逻辑而已            } else {                editable.delete(beforeDot, beforeDot + 1);            }            return;        }        //如果包含小数点 限制小数点后位数        if (temp.length() - posDot - 1 > afterDot && afterDot != -1) {            editable.delete(posDot + afterDot + 1, posDot + afterDot + 2);//删除小数点后多余位数        }    }}
复制代码

使用的时候 如下:

复制代码
                <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位
复制代码
0 0