EditText动态设置输入类型与过滤器的使用

来源:互联网 发布:淘宝助理手机版6.1 编辑:程序博客网 时间:2024/05/22 06:28

EditText动态设置输入类型与过滤器的使用

在项目中,出于需要对 EditText 的长度以及输入类型进行动态改变,自己通过设置 EditText 类中的 setInputTypesetFilters 方法来实现这一功能。

例子一:设置纯数字类型,并且限制数字长度。

// 设置输入的类型为数字// 等价于xml中属性 android:inputType="number"editText.setInputType(InputType.TYPE_CLASS_NUMBER);// 限制输入长度限制(当前设置为5)// 使用系统自带的InputFilter接口类中的LengthFilter子类来完成的editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(5)});

例子二:设置带小数类型,限制小点前后数字长度。

// 设置输入的类型为带小数类型// 等价于xml中属性 android:inputType="numberDecimal"editText.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL);// 限制小点前后数字长度(当前设置为前5后2)// 通过实现InputFilter接口来完成长度的限制editText.setFilters(new InputFilter[] {new DecimalInputFilter(5, 2)});

DecimalInputFilter 类的实现

import android.text.InputFilter;import android.text.Spanned;import android.text.TextUtils;/** * Created by sky on 16-9-2. */public class DecimalInputFilter implements InputFilter {    private String mRegularExpression;    public DecimalInputFilter() {        this(5);    }    public DecimalInputFilter(int firstLength) {        this(firstLength, 2);    }    public DecimalInputFilter(int firstLength, int lastLength) {        mRegularExpression = String.format("(\\d{0,%d}(\\.\\d{0,%d})?)", firstLength, lastLength);    }    @Override    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {        boolean delete = false;        StringBuilder builder = new StringBuilder(dest);        if (TextUtils.isEmpty(source)) {            delete = true;            builder.delete(dstart, dend);        } else {            builder.insert(dstart, source);        }        String value = builder.toString();        return value.matches(mRegularExpression) ? null : delete ? "." : "";    }}

注:代码中的 delete 变量主要出于在单独选择 . 进行删除操作成特意添加的,当删除 . 时小数点前面的数字长度超出时程序在阻止其进行删除 . 的操作。

0 0