Android——使用InputFilter实现EditText禁止输入空格及filter失效问题

/**
 * EditText禁止输入空格,使用:mEditText.setFilters(new InputFilter[] { TextUtils.filter });
 */
public static InputFilter filter = new InputFilter() {
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest,
        int dstart, int dend) {
        if (source.equals(" ")) {
            return "";
        } else {
            return null;
        }
    }
};

在实际代码中,有两处都用了这个过滤器,其中一处一直有效,另一处刚开始不能输入空格,在输入文字有变化之就失效了。

仔细找了一下我代码中用法不同的地方,发现会出现无效的那处,我在ontextchanged方法中给edittext重新设置了过滤器。修改的方法是,在ontextchanged中,重新设置的时候,把filter加进去。

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

    ...

    //设置过滤器,限制输入字长,及不能输入空格
    mEditText.setFilters(
        new InputFilter[] { new InputFilter.LengthFilter(mTextMaxLength), filter });
}
Android中,你可以通过设置`EditText`组件的`Filters`属性来限制用户输入的字符长度。`InputFilter`是一个实现了`InputFilter`接口的对象,它可以根据特定规则过滤掉用户的输入。以下是简单的步骤: 1. 创建一个自定义的`InputFilter`实现,例如`LengthLimitingFilter`: ```java public class LengthLimitingFilter implements InputFilter { private int maxLength; public LengthLimitingFilter(int maxLength) { this.maxLength = maxLength; } @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { if (source.length() > maxLength) { return source.subSequence(0, maxLength); } return null; // 表示没有过滤,允许输入 } } ``` 2. 在创建`EditText`时,将其`Filters`设置为你刚才创建的限制器,以及可能需要的其他过滤器: ```xml <EditText android:id="@+id/limitEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:maxLength="20" <!-- 设置最大输入长度 --> android:filters="@array/input_filters" <!-- 假设数组名为@array/input_filters --> /> ``` 3. 在XML布局文件或者其他地方初始化时,动态添加过滤器: ```java ArrayAdapter<InputFilter> filterAdapter = new ArrayAdapter<>(context, R.array.input_filters, 0); filterAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); editText.setFilters(filterAdapter.getArray()); ``` 4. 在`arrays.xml`或类似资源文件中定义过滤器列表: ```xml <integer-array name="input_filters"> <item>@integer/max_length_filter</item> </integer-array> <resources> <integer name="max_length_filter">com.example.LengthLimitingFilter#20</integer> </resources> ``` 现在,当用户尝试在EditText输入超过设定长度的字符时,输入会被截断或者阻止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值