zoukankan      html  css  js  c++  java
  • 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-9u4E00-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。

  • 相关阅读:
    FJNU 1151 Fat Brother And Geometry(胖哥与几何)
    FJNU 1157 Fat Brother’s ruozhi magic(胖哥的弱智术)
    FJNU 1159 Fat Brother’s new way(胖哥的新姿势)
    HDU 3549 Flow Problem(最大流)
    HDU 1005 Number Sequence(数列)
    Tickets(基础DP)
    免费馅饼(基础DP)
    Super Jumping! Jumping! Jumping!(基础DP)
    Ignatius and the Princess IV(基础DP)
    Keywords Search(AC自动机)
  • 原文地址:https://www.cnblogs.com/ldq2016/p/6235872.html
Copyright © 2011-2022 走看看