只允许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);

**/





&nbsp;





发现,**[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">&#8220;@+id/register_userName_editText&#8221;</span>
  
  - <span class="attribute">style</span>=<span class="attribute-value">&#8220;@style/register_editText_style&#8221;</span>
  
  - <span class="attribute">android:digits</span>=<span class="attribute-value">&#8220;@string/register_name_digits&#8221;</span>
  
  - <span class="attribute">android:textColor</span>=<span class="attribute-value">&#8220;@drawable/register_edit_text_textColor&#8221;</span>
  
  - <span class="attribute">android:textColorHint</span>=<span class="attribute-value">&#8220;@drawable/register_hint_text_textColor&#8221;</span>
  
  - <span class="attribute">android:hint</span>=<span class="attribute-value">&#8220;@string/register_name_hint_text&#8221;</span>
  
  - <span class="tag">/></span>
&nbsp;





在string.xml里





&nbsp;
**[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">&#8220;register_name_digits&#8221;</span><span class="tag">></span>
  
  - 
  - ._0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLIMNOPQRSTUVWXYZ
  
  - 
  - <span class="tag"></</span><span class="tag-name">string</span><span class="tag">></span>
&nbsp;





&nbsp;





&nbsp;





&nbsp;
Java代码
  - editText01.addTextChangedListener(<span class="keyword">new</span> TextWatcher() {
  
  - String tmp = <span class="string">&#8220;&#8221;</span>;
  
  - String digits = <span class="string">&#8220;abcdef&#8221;</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">&#8220;<><>afterTextChanged<><>&#8221;</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);
  
  - }
  
  - });

💬 评论