Android EditText限制输入两位小数

概述

在Android开发中,我们经常需要对用户输入的内容进行限制和验证。如果我们希望用户在EditText中只能输入两位小数的数字,我们可以通过以下步骤来实现。

步骤

步骤 操作
1 创建一个EditText控件
2 设置输入类型为数字
3 添加一个TextWatcher
4 在TextWatcher中监听用户输入的内容
5 通过正则表达式验证输入的格式

代码实现

步骤1:创建一个EditText控件

在XML布局文件中添加一个EditText控件,用于用户输入。

<EditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal" />

步骤2:设置输入类型为数字

在代码中找到EditText控件,并设置其输入类型为数字。这样可以确保用户只能输入数字内容。

EditText editText = findViewById(R.id.editText);
editText.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);

步骤3:添加一个TextWatcher

TextWatcher是一个接口,用于监听EditText中文本内容的变化。我们可以通过实现TextWatcher接口,重写其中的方法来监听并处理用户输入的内容。

editText.addTextChangedListener(new TextWatcher() {
    // 在文本变化前调用
    @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) {
    }
});

步骤4:在TextWatcher中监听用户输入的内容

在TextWatcher的onTextChanged方法中,我们可以获取用户输入的内容,并进行处理。首先,我们需要判断用户是否输入了小数点,如果输入了小数点,则需要再判断小数点后的位数是否超过两位。

editText.addTextChangedListener(new TextWatcher() {
    // 在文本变化前调用
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    // 在文本变化时调用
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        String input = s.toString();
        // 判断是否包含小数点
        if (input.contains(".")) {
            // 获取小数点的位置
            int dotIndex = input.indexOf(".");
            // 判断小数点后的位数是否大于两位
            if (input.length() - dotIndex - 1 > 2) {
                // 超过两位,删除多余的位数
                editText.setText(input.substring(0, dotIndex + 3));
                editText.setSelection(dotIndex + 3);
            }
        }
    }

    // 在文本变化后调用
    @Override
    public void afterTextChanged(Editable s) {
    }
});

步骤5:通过正则表达式验证输入的格式

在步骤4中,我们已经限制了小数点后的位数不超过两位。但是,我们还需要验证输入的格式是否符合要求,即小数点前后只能是数字。

editText.addTextChangedListener(new TextWatcher() {
    // 在文本变化前调用
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    // 在文本变化时调用
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        String input = s.toString();
        // 判断是否包含小数点
        if (input.contains(".")) {
            // 获取小数点的位置
            int dotIndex = input.indexOf(".");
            // 判断小数点后的位数是否大于两位
            if (input.length() - dotIndex - 1 > 2) {
                // 超过两位,删除多余的位数
                editText.setText(input.substring(0, dotIndex + 3));
                editText.setSelection(dotIndex + 3);
            }
        }
        
        // 验证输入的格式是否符合要求
        if (!Pattern.matches("\\d*\\.?\\d{0,2}", input)) {
            editText.setText