Android EditText 输入限制最大数 最小数返回 包容小数点后2位 光标始终在最后

该代码示例展示了如何在Android中创建一个自定义的InputFilter,用于限制EditText输入的数值范围、小数点位数以及负数。类`InputFilterMinMax`检查输入是否在指定的最小值和最大值之间,且控制小数点后的位数。同时,`LastInputEditText`子类确保光标始终位于文本末尾。
摘要由CSDN通过智能技术生成
import android.text.InputFilter;
import android.text.Spanned;
import android.util.Log;

import com.example.otgdemo.utils.ToastUtil;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class InputFilterMinMax implements InputFilter {

    private float min, max;
    private int dot_num;
    private int plus_minus = 0;

    public InputFilterMinMax(float min, float max, int dot_num, int plus_minus) {

        this.min = min;
        this.max = max;
        this.dot_num = dot_num;
        this.plus_minus = plus_minus;
    }

    public InputFilterMinMax(String min, String max) {

        this.min = Float.valueOf(min);
        this.max = Float.valueOf(max);

    }

    @Override

    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        try {
            //限制小数点位数
            if (source.equals(".") && dest.toString().length() == 0) {
                return "0.";
            }
            //有负数的
            if (plus_minus == 1) {
                if (source.equals("-") && start == 0) {
                    return "-";
                }
            }
            //不让首位置出现00 这种情况
            if (source.equals("0") && start == 0 && dest.toString().equals("0")) {
                return "";
            }

            if (dest.toString().contains(".")) {
                int index = dest.toString().indexOf(".");
                int mlength = dest.toString().substring(index).length();
                if (mlength == dot_num + 1) {
                    return "";
                }
            }

//            if (plus_minus == 1) {
//                String old = String.valueOf(dest);
//                String newString = String.valueOf(source);
//                String str = old + newString;
//                int num_str = Integer.parseInt(str);
//                if (num_str % 0.25 == 0) {
//
//                }else {
//                    return null;
//                }
//
//
//            }

//限制大小
            float input = Float.valueOf(dest.toString() + source.toString());
            if (isInRange(min, max, input))
                return null;

        } catch (Exception nfe) {
        }

        return "";
    }

    private boolean isInRange(float a, float b, float c) {
        return b > a ? c >= a && c <= b : c >= b && c <= a;
    }
}

//自定义edittext


import android.content.Context;

import android.util.AttributeSet;
import android.widget.EditText;

import androidx.appcompat.widget.AppCompatEditText;

/**
 * 只能在最后输入数据的输入框
 * <pre>
 *     author  : Fantasy
 *     version : 1.0, 2018-08-11
 *     since   : 1.0, 2018-08-11
 * </pre>
 */
public class LastInputEditText extends androidx.appcompat.widget.AppCompatEditText {

    public LastInputEditText(Context context) {
        super(context);
    }

    public LastInputEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public LastInputEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onSelectionChanged(int selStart, int selEnd) {
        super.onSelectionChanged(selStart, selEnd);
        if (selStart == selEnd) { // 防止不能多选
            setSelection(getText().length()); // 保证光标始终在最后面
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值