Android EditText禁止输入中文字符
只允许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里 **[xml]** [view plain](http://blog.csdn.net/jdsjlzx/article/details/6762751#) [copy](http://blog.csdn.net/jdsjlzx/article/details/6762751#) <div> <embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_1"> </embed> </div> </div> </div> - <span class="tag"><</span><span class="tag-name">EditText</span> - <span class="attribute">android:id</span>=<span class="attribute-value">“@+id/register_userName_editText”</span> - <span class="attribute">style</span>=<span class="attribute-value">“@style/register_editText_style”</span> - <span class="attribute">android:digits</span>=<span class="attribute-value">“@string/register_name_digits”</span> - <span class="attribute">android:textColor</span>=<span class="attribute-value">“@drawable/register_edit_text_textColor”</span> - <span class="attribute">android:textColorHint</span>=<span class="attribute-value">“@drawable/register_hint_text_textColor”</span> - <span class="attribute">android:hint</span>=<span class="attribute-value">“@string/register_name_hint_text”</span> - <span class="tag">/></span> 在string.xml里 **[xml]** [view plain](http://blog.csdn.net/jdsjlzx/article/details/6762751#) [copy](http://blog.csdn.net/jdsjlzx/article/details/6762751#) <div> <embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_2"> </embed> </div> </div> </div> - <span class="tag"><</span><span class="tag-name">string</span> <span class="attribute">name</span>=<span class="attribute-value">“register_name_digits”</span><span class="tag">></span> - - ._0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLIMNOPQRSTUVWXYZ - - <span class="tag"></</span><span class="tag-name">string</span><span class="tag">></span> Java代码 - 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); - } - });