只允许EditText输入数字或者email格式字符是非常简单的(详见API文档)。
要实现只允许输入自定的数字字符也是很容易的(详见API文档,[setKeyListener(KeyListener)](http://blog.csdn.net/reference/android/widget/TextView.html#setKeyListener(android.text.method.KeyListener)) 和<span class="sympad">setFilters</span> <span class="normal">([InputFilter[]](http://blog.csdn.net/reference/android/text/InputFilter.html) filters)</span> )。
但是要限制只能输入指定的字母字符就非常的困难。
/**
InputFilter[] ifs = {new InputFilter.LengthFilter(10),new DigitsKeyListener(true,true)};
editText01.setFilters(ifs);
**/
发现,**[Android](http://lib.csdn.net/base/15):digits**的参数是一个字符串,没有更多的语义检查,因此想到内部处理很可能仅是简单的检查,输入的字符是否在给定的字符串中(要我设计,我就这样做)。尝试着给它指定带有英文字符的参数,发现果然如此。万幸,万幸!
在layout.xml里
在string.xml里
- editText01.addTextChangedListener(<span class="keyword">new</span> TextWatcher() {
- String tmp = <span class="string">“”</span>;
- String digits = <span class="string">“abcdef”</span>;
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">void</span> onTextChanged(CharSequence s, <span class="keyword">int</span> start, <span class="keyword">int</span> before, <span class="keyword">int</span> count) {
- }
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">void</span> beforeTextChanged(CharSequence s, <span class="keyword">int</span> start, <span class="keyword">int</span> count, <span class="keyword">int</span> after) {
- tmp = s.toString();
- }
-
- <span class="annotation">@Override</span>
- <span class="keyword">public</span> <span class="keyword">void</span> afterTextChanged(Editable s) {
- Log.d(Sample4Main.TAG, <span class="string">“<><>afterTextChanged<><>”</span> + s.toString());
-
- String str = s.toString();
- <span class="keyword">if</span>(str.equals(tmp)){
- <span class="keyword">return</span>;
- }
-
- StringBuffer sb = <span class="keyword">new</span> StringBuffer();
- <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number"></span>; i < str.length(); i++){
- <span class="keyword">if</span>(digits.indexOf(str.charAt(i)) >= <span class="number"></span>){
- sb.append(str.charAt(i));
- }
- }
- tmp = sb.toString();
- editText01.setText(tmp);
- }
- });
💬 评论