首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设置“数字”并输入禁止字符时,EditText会隐藏错误消息

设置“数字”并输入禁止字符时,EditText会隐藏错误消息
EN

Stack Overflow用户
提问于 2020-08-19 23:22:50
回答 1查看 25关注 0票数 0

我和digits有EditText

代码语言:javascript
运行
复制
<EditText
        ...
        android:digits="0123456789ABCDEFabcdef"
        android:inputType="textCapCharacters|textNoSuggestions" />

然后我检查TextWatcher中的输入错误

代码语言:javascript
运行
复制
editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        Log.d(TAG, "beforeTextChanged");
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        Log.d(TAG, "onTextChanged");
    }

    @Override
    public void afterTextChanged(Editable s) {
        Log.d(TAG, "afterTextChanged");
        try {
            int color = Color.parseColor(s.toString());
        } catch (Exception e){
            editText.setError("Wrong color");
        }
    }
});

但是,当我输入任何禁用字符(例如,L)时,错误消息被重置,因为输入已更改,但没有调用任何TextWatcher方法,可能是由于digits

我可以在不删除digits和不手动处理TextWatcher中的禁止字符的情况下修复它?也许有一种方法可以保证在每个输入操作上都会被调用?

EN

Stack Overflow用户

回答已采纳

发布于 2020-08-21 01:21:19

我发现错误的按键事件出现在InputFilter中。但是它覆盖了xml中的maxLength (您可以无休止地输入在digits中定义的字符),因此它必须在代码中手动创建。

代码语言:javascript
运行
复制
InputFilter filter = new InputFilter(){
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        // Check here for input error
        return source;
    }
};
InputFilter.LengthFilter lengthFilter = new InputFilter.LengthFilter(7);
editText.setFilters(new InputFilter[]{hexFilter, lengthFilter});
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63490274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档