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

作者:lqh 时间:2023-10-11 15:48:19 

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。

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

标签:Android,EditText,字符类型
0
投稿

猜你喜欢

  • JNI方法实现图片压缩(压缩率极高)

    2021-08-07 11:32:55
  • Android Activity向右滑动返回

    2021-12-06 16:56:06
  • 详解Android中提示对话框(ProgressDialog和DatePickerDialog和TimePickerDialog&PopupWindow)

    2023-05-10 19:27:43
  • C语言中输入输出流与缓冲区的深入讲解

    2021-06-12 07:44:29
  • Android自动播放Banner图片轮播效果

    2022-09-06 05:55:42
  • Android Activity切换(跳转)时出现黑屏的解决方法 分享

    2022-10-25 15:41:07
  • Java链表数据结构及其简单使用方法解析

    2022-11-20 23:42:53
  • springboot2启动时执行,初始化(或定时任务)servletContext问题

    2022-10-18 13:14:30
  • Mybatis plus通用字段自动填充的示例

    2022-10-27 02:05:27
  • 深入理解Java设计模式之组合模式

    2023-09-02 02:06:25
  • SpringBoot3.0自定stater模块的操作流程(chatGPT提供的49种场景)

    2023-06-15 05:21:46
  • Android项目实现短信的发送、接收和对短信进行拦截

    2021-06-14 06:59:26
  • 普通对象使用spring容器中的对象的实现方法

    2023-06-17 12:27:20
  • 深入理解Java中的final关键字_动力节点Java学院整理

    2022-05-05 23:18:24
  • Netty分布式高性能工具类同线程下回收对象解析

    2023-05-24 22:00:55
  • Java中的Gradle与Groovy的区别及存在的关系

    2023-05-13 17:28:46
  • Android仿拉手网团购App我的收藏界面实例代码

    2023-11-18 18:31:38
  • Spring实战之方法级别缓存用法示例

    2022-10-20 02:00:32
  • C# winform程序读取文本中的值实例讲解

    2023-03-17 21:36:51
  • C#采用递归实现阶乘的方法

    2022-12-09 09:24:56
  • asp之家 软件编程 m.aspxhome.com