首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

了解EditText的InputFilter

2013-03-10 
理解EditText的InputFilter使用EditText的过程中,有时会遇到disable(禁止输入)的需求,直接使用setEnabled(

理解EditText的InputFilter

使用EditText的过程中,有时会遇到disable(禁止输入)的需求,直接使用setEnabled(false)是无效的。网上搜索发现可以通过设置InputFilter来实现

        int n = mFilters.length;        for (int i = 0; i < n; i++) {            CharSequence out = mFilters[i].filter(text, 0, text.length(), EMPTY_SPANNED, 0, 0);            if (out != null) {                 text = out;            }        }...        sendOnTextChanged(text, 0, oldlen, textLength);        onTextChanged(text, 0, oldlen, textLength);
遍历所有的InputFilter,如果filter后的结果不是null,更新text变量。这意味着filter返回null就代表保持原文本不变(如上,在InputFilter.LengthFilter中看到的)。所有InputFilter后的结果就是最终显示在TextView中的文本。

了解了InputFilter的原理,就知道如何对TextView/EditText的文本做“手脚”了。比如

    不响应所有输入的特殊字符(@#$%^&)显示最多只能输入100个大写字母(使用InputFilter.LengthFilter和InputFilter.Allcaps的组合)将输入的某个字符自动替换为其他字符
回头再看看disable EditText的那个InputFilter,对EditText来说,调用filter()的后三个参数始终是EMPTY_SPANNED, 0, 0,当执行filter时,就相当于执行EMPTY_SPANNED.subSequence(0, 0),永远返回"",从而实现了disable。








热点排行