📜  带有浮点数的edittext android (1)

📅  最后修改于: 2023-12-03 15:09:44.304000             🧑  作者: Mango

带有浮点数的 EditText Android

在Android开发过程中,经常需要使用 EditText 来获取用户输入的数据。EditText 默认只支持整数输入。如果需要支持浮点数输入,需要进行一些额外的设置。本文将介绍如何创建带有浮点数的 EditText。

创建带有浮点数的 EditText

在布局文件中创建 EditText,设定 android:inputType 属性为“numberDecimal”。例如:

<EditText
    android:id="@+id/editTextNumberDecimal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Enter a number (decimal)"
    android:inputType="numberDecimal" />

在代码中,可以直接获取 EditText 中的浮点数数据。例如:

EditText editText = findViewById(R.id.editTextNumberDecimal);
float number = Float.parseFloat(editText.getText());

这样就可以获取 EditText 中的浮点数数据。

支持负数输入

如果需要支持负数输入,可以设定 android:inputType 属性为“numberDecimal|numberSigned”。例如:

<EditText
    android:id="@+id/editTextNumberDecimalSigned"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Enter a number (decimal, signed)"
    android:inputType="numberDecimal|numberSigned" />

在代码中,可以直接获取 EditText 中的带有正负号的浮点数数据。例如:

EditText editText = findViewById(R.id.editTextNumberDecimalSigned);
float number = Float.parseFloat(editText.getText());
支持小数点后指定位数的输入

如果需要支持小数点后指定位数的输入,可以借助 InputFilter 实现。例如:

public class DecimalDigitsInputFilter implements InputFilter {

    private final int decimalDigits;

    public DecimalDigitsInputFilter(int decimalDigits) {
        this.decimalDigits = decimalDigits;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        StringBuilder builder = new StringBuilder(dest);
        builder.replace(dstart, dend, source.subSequence(start, end).toString());
        if (!builder.toString().matches("(([1-9]{1})([0-9]{0,6})?)?(\\.[0-9]{0," + decimalDigits + "})?")) {
            if (source.length() == 0) {
                return dest.subSequence(dstart, dend);
            } else {
                return "";
            }
        }
        return null;
    }
}

以上代码会限制输入到 EditText 中的小数点后部分为 decimalDigits 位,如果输入超过了限制范围,就会自动被过滤掉。在使用 EditText 时,只需要设定 InputFilter,就可以实现小数点后指定位数的输入。例如:

EditText editText = findViewById(R.id.editTextNumberDecimalDigits);
editText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(2)});

以上代码实现了支持小数点后两位的输入。

结语

以上就是创建带有浮点数的 EditText 的方法,通过这些方法,可以方便地获取用户输入的浮点数数据,以及限制输入的范围和格式。