欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android EditText限制输入字符类型的方法总结

程序员文章站 2023-12-01 13:23:10
android edittext限制输入字符类型的方法总结 前言: 最近的项目上需要限制edittext输入字符的类型,就把可以实现这个功能的方法整理了一下: 1...

android edittext限制输入字符类型的方法总结

前言:

最近的项目上需要限制edittext输入字符的类型,就把可以实现这个功能的方法整理了一下:

1、第一种方式是通过edittext的inputtype来实现,可以通过xml或者java文件来设置。假如我要设置为显示密码的形式,可以像下面这样设置:

在xml中

 android:inputtype="textpassword"

在java文件中,可以用 myedittext.setinputtype(inputtype.type_text_variation_password);
当然,还有更多的其他属性用来进行输入设置。

2、第二种是通过android:digits 属性来设置,这种方式可以指出要显示的字符,比如我要限制只显示数字,可以这样:

   android:digits="0123456789"

如果要显示的内容比较多,就比较麻烦了,将要显示的内容依次写在里面。

3、通过正则表达式来判断。下面的例子只允许显示字母、数字和汉字。

public static string stringfilter(string str)throws patternsyntaxexception{   
   // 只允许字母、数字和汉字   
   string  regex = "[^a-za-z0-9\u4e00-\u9fa5]";           
   pattern  p  =  pattern.compile(regex);   
   matcher  m  =  p.matcher(str);   
   return  m.replaceall("").trim();   
 }

然后需要在textwatcher的ontextchanged()中调用这个函数,

@override 
   public void ontextchanged(charsequence ss, int start, int before, int count) { 
     string editable = edittext.gettext().tostring(); 
     string str = stringfilter(editable.tostring());
     if(!editable.equals(str)){
       edittext.settext(str);
       //设置新的光标所在位置 
       edittext.setselection(str.length());
     }
   } 

4、通过inputfilter来实现。

实现inputfilter过滤器,需要覆盖一个叫filter的方法。

public abstract charsequence filter ( 
  charsequence source, //输入的文字 
  int start, //开始位置 
  int end, //结束位置 
  spanned dest, //当前显示的内容 
  int dstart, //当前开始位置 
  int dend //当前结束位置 
);

下面的实现使得edittext只接收字符(数字、字母和汉字)和“-”“_”,character.isletterordigit会把中文也当做letter。

edittext.setfilters(new inputfilter[] { 
new inputfilter() { 
  public charsequence filter(charsequence source, int start, int end, spanned dest, int dstart,
 int dend) { 
      for (int i = start; i < end; i++) { 
          if ( !character.isletterordigit(source.charat(i)) && !character.tostring(source.charat(i)) .equals("_") && !character.tostring(source.charat(i)) .equals("-"))
 { 
              return ""; 
          } 
      } 
      return null; 
  } }); 

另外使用inputfilter还能限制输入的字符个数,如   

  edittext tv =newedittext(this); 

    int maxlength =10; 

    inputfilter[] farray =new inputfilter[1]; 

    farray[0]=new inputfilter.lengthfilter(maxlength); 

    tv.setfilters(farray);

上面的代码可以限制输入的字符数最大为10。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!