EditText数据校验

格式

numeric(7,2)
共7位,小数点后2位,小数点前5位

校验

NumberDecimalVerification

package util;

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

/**
 * Created on 2018/7/17.
 *
 * @desc 小数校验
 */
public class NumberDecimalVerification implements TextWatcher {
    private EditText editText;
    /**
     * 小数点前长
     */
    private int beforeDotLengthReceive;
    /**
     * 小数点后长
     */
    private int afterDotLengthReceive;

    /**
     * constructor
     *
     * @param editText        控件
     * @param beforeDotLength 小数点前长
     * @param afterDotLength  小数点后长
     */
    public NumberDecimalVerification(EditText editText, int beforeDotLength, int afterDotLength) {
        this.editText = editText;
        this.beforeDotLengthReceive = beforeDotLength;
        this.afterDotLengthReceive = afterDotLength;
    }

    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void afterTextChanged(Editable editable) {
        verification(editable, editText);
    }

    /**
     * 校验
     *
     * @param editable editable
     */
    private void verification(Editable editable, EditText editText) {
        String temporary = editable.toString();
        // 字符串指定字符头次现索引
        int posDot = temporary.indexOf(".");
        // 光标位
        int index = editText.getSelectionStart();
        if (posDot == 0) {
            // 输数字后输小数点(否删所有字符)
            editable.delete(0, temporary.length());
            return;
        }
        if (posDot < 0) {
            // 无小数点
            if (temporary.length() <= beforeDotLengthReceive) {
                // 小于beforeDotLengthReceive位直返
                return;
            } else {
                // 删光标前字符
                editable.delete(index - 1, index);
                return;
            }
        }
        if (posDot > beforeDotLengthReceive) {
            // 小数点前大于beforeDotLengthReceive位删光标前一位
            editable.delete(index - 1, index);
            return;
        }
        if (temporary.length() - posDot - 1 > afterDotLengthReceive) {
            // 有小数点删光标前字符
            editable.delete(index - 1, index);
        }
    }
}

主代码

editText.addTextChangedListener(new NumberDecimalVerification(editText, 5, 2));

猜你喜欢

转载自blog.csdn.net/zsp_android_com/article/details/81078604