EditText限制输入两位小数和最大位数

1.设置EditText控件类型为实数

android:inputType="numberDecimal" (无符号的浮点数) 
android:inputType="numberSigned|numberDecimal"(有符号的浮点数)

2.创建一个输入过滤器InputFilter

/**
 * 用于控制EditText最大输入小数点前位数和小数点后位数 <br/>
 * 示例 : mEditText.setFilters(DecimalDigitsInputFilter.getFilters(new DecimalDigitsInputFilter(5, 2))); <br/><br/>
 * 来源参考 : https://stackoverflow.com/questions/27077507/android-how-to-only-allow-a-certain-number-of-decimal-places
 *
 * @author savet
 */
public class DecimalDigitsInputFilter implements InputFilter {

    // 正则匹配
    private final Pattern mPattern;

    /**
     * 构建一个用于控制EditText最大输入小数点前位数和小数点后位数的输入过滤器
     *
     * @param digitsBeforeZero 小数点之前的位数
     * @param digitsAfterZero  小数点之后的位数
     */
    public DecimalDigitsInputFilter(int digitsBeforeZero, int digitsAfterZero) {
        String pattern = "^\\-?(\\d{0," + (digitsBeforeZero) + "}|\\d{0," + (digitsBeforeZero) + "}\\.\\d{0," + digitsAfterZero + "})$";
        mPattern = Pattern.compile(pattern);
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned destination, int destinationStart, int destinationEnd) {
        if (end > start) {
            // adding: filter
            // build the resulting text
            String destinationString = destination.toString();
            String resultingTxt = destinationString.substring(0, destinationStart)
                    + source.subSequence(start, end)
                    + destinationString.substring(destinationEnd);
            // return null to accept the input or empty to reject it
            return resultingTxt.matches(this.mPattern.toString()) ? null : "";
        }
        // removing: always accept
        return null;
    }

    public static InputFilter[] getFilters(InputFilter inputFilter) {
        return new InputFilter[]{inputFilter};
    }
}

3.给自己的EditText控件设置输入过滤器InputFilter

mEditText.setFilters(DecimalDigitsInputFilter.getFilters(new DecimalDigitsInputFilter(5, 2)));

猜你喜欢

转载自blog.csdn.net/savet/article/details/131105800