Android--过滤EditText的输入

 
 

EditText文本输入控件,在App开发中可能会遇到各种各样的要求,如只能输入数字、限定长度、不允许输入特殊字符等要求,这时候我们就要实现EditText的过滤功能,达到产品的要求。

(一)简单的过滤

EditText已经提供了一些过滤输入的属性 1、通过inputType限定 android:inputType="textCapCharacters"//前3个输入普通字符 android:inputType="textCapWords"//单词首字母大小 android:inputType="textCapSentences"//仅第一个字母大写 android:inputType="textAutoCorrect"//前两个自动完成 android:inputType="textAutoComplete"//前两个自动完成 android:inputType="textMultiLine"//多行输入 android:inputType="textImeMultiLine"//输入法多行(不一定支持) android:inputType="textNoSuggestions"//不提示 android:inputType="textUri"//URI格式 android:inputType="textEmailAddress"//电子邮件地址格式 android:inputType="textEmailSubject"//邮件主题格式 android:inputType="textShortMessage"//短消息格式 android:inputType="textLongMessage"//长消息格式 android:inputType="textPersonName"//人名格式 android:inputType="textPostalAddress"//邮政格式 android:inputType="textPassword"//密码格式 android:inputType="numberPassword"//数字密码格式 android:inputType="textVisiblePassword"//密码可见格式 android:inputType="textWebEditText"//作为网页表单的文本格式 android:inputType="textFilter"//文本筛选格式 android:inputType="textPhonetic"//拼音输入格式 android:inputType="number"//数字格式 android:inputType="numberSigned"//有符号数字格式 android:inputType="numberDecimal"//可以带小数点的浮点格式 android:inputType="phone"//拨号键盘 android:inputType="datetime"//日期时间键盘 android:inputType="date"//日期键盘 android:inputType="time"//时间键盘

我们常用的有phone,number,numberSigned,numberDecimal等限定输入数字和textpassword,numberPassword格式. 除了inputType属性还有一个numeric属性(现在不推荐实用了,因为inputType已经包含了) android:numeric="integer" android:numeric="signed" android:numeric="decimal" 对应inputType的number,numberSigned,numberDecimal。

2、通过单个属性 //为true限制输入电话号码 android:phoneNumber=”true” //为true限制输入电话号码 android:phoneNumber=”true” //为true限制输入密码 android:password="true"

(二)使用digits属性过滤

在很多情况下我们要要满足产品复杂的需求,上面的属性可能满足不了我们。比如产品要求密码只能输入数字、字母和下划线的时候,我们就必须使用其他属性来限定了。 Android给出了digits属性来满足我们的需要,digits内容为你只能输入的字符,其他字符无法输入。如上面的需求,digits内的内容为:

    <EditText
        android:id="@+id/editText"
        android:inputType="textPassword"
        android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678_"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

密码格式且输入必须是digits内限定的字符。通过digits属性可以根据产品需求限定输入字符。

(三)在代码中限定输入字符

xml中我们可以使用digits属性可以实现字符的限定,代码中EditText提供了setKeyListener(KeyListener )和setFilters(InputFilter[])两个方法。

1、setFilters
setFilters接收的参数是一个InputFilter类型的数组,是对输入的文字进行过滤。
如限制输入输入字数为16

editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(16)});

只能输入16位大写字母

editText.setFilters(new InputFilter[]{new InputFilter.AllCaps(),new InputFilter.LengthFilter(16)});

如限制只能输入a-z的小写字母,和输入字数为16。

editText.setFilters(new InputFilter[]{codeInputFilter,new InputFilter.LengthFilter(16)});

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

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

我们实现一个输入小写转大写的filter,且不超过16位

InputFilter switchFilter = new InputFilter() {
    public CharSequence filter(CharSequence source, int start, int end,
                                   Spanned dest, int dstart, int dend) {
        return source.toString().toUpperCase();
    }
};

editText.setFilters(new InputFilter[]{switchFilter,new InputFilter.LengthFilter(16)});

2、setKeyListener
InputFilter提供了字符过滤,KeyListener提供了对输入键盘按键的监听。

DigitsKeyListener、NumberKeyListener是我们经常使用的,DigitsKeyListener继承了NumberKeyListener,NumberKeyListener实现了InputFilter,所以我们在使用InputFilter的时候发现也可以设置DigitsKeyListener和NumberKeyListener。

//只接受整数输入  
KeyListener l = new DigitsKeyListener(fasle,false);  
//接受有符号整数输入  
KeyListener l = new DigitsKeyListener(true,false);  
//接受小数,整数输入  
KeyListener l = new DigitsKeyListener(false,true);  
//接受有符号整数/小数输入  
KeyListener l = new DigitsKeyListener(true,true);  
editText.setKeyListener(l);

DigitsKeyListener是对数字输入的限制,NumberKeyListener则是对字符输入的限制,刚开始用差点搞反。

//字符过滤功能
NumberKeyListener myKeyListener = new NumberKeyListener() {
    public int getInputType()
    {
        //指定键盘类型
        return InputType.TYPE_CLASS_TEXT;
    }

    protected char[] getAcceptedChars()
    {
        //指定你所接受的字符
        return getString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-").toCharArray();
    }
};

NumberKeyListener类似于digits的使用,到这里字符过滤功能介绍完毕。




链接:http://www.jianshu.com/p/bd4273c12e5b

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值