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

本文介绍了如何在Android应用中动态地控制EditText组件的输入类型和长度限制。通过使用setInputType和setFilters方法,可以灵活地设定数字、小数等输入格式及长度,同时还提供了一个自定义过滤器类实现小数点前后长度限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 变量主要出于在单独选择 . 进行删除操作成特意添加的,当删除 . 时小数点前面的数字长度超出时程序在阻止其进行删除 . 的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值