android edittext inputfilter,EditText之InputFilter的使用(一)

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

引言

在使用EditText的时候,我们常常需要根据需求限制用户输入的格式,字符。例如只能接收用户输入邮箱地址、电话号码、数字、密码等等。

方案

第一种方法是在xml布局文件中使用android:inputType属性,见图1。

常用配置:text: 对于输入没有任何限制

number: 只限于输入数字、符号以及小数点,同[0-9+-.]

numberDecimal: 只允许输入数字与小数点,同[0-9.]

numberSigned: 只允许输入数字与符号,同[0-9+-]

textPassword: 对于输入没有限制,但会以密码的形式显示

textCapWords: 对于输入没有限制,但会将每个单词的首字母自动转换为大写

使用此方法能满足大部分的需求,且相应配置都会弹出相对应的软键盘,界面显示效果也比较和谐统一。美中不足之处在于可定制性不高,如果需要限制的格式比较特殊,无法使用该方法完成我们的需求。作为一名有素养有追求的程序员,我们不会止步于满足大多数,因此继续深入。

改进

通常解决的方法是使用TextWatcher,重写以下方法。1

2

3

4

5

6

7

8public void (CharSequence charSequence, int start, int count, int after){}

public void onTextChanged(CharSequence charSequence, int start, int before, int count){}

public void afterTextChanged(Editable editable){}

在beforeTextChanged里记住输入前的值,在onTextChanged或者afterTextChanged里拿到修改过后的值,然后与我们的需求格式(正则表达式或者String.startWith等表达式)进行比较,如果符合条件就继续输入,否则将内容显示为输入前值,并将光标定位到相应位置。

用TextWatcher基本能实现我们的预期需求了。但是,从理论上来讲,我们不应该这么用。TextWatcher,顾名思义,它是用来监听用户的输入的。当用户输入指定字符后,UI如果需要作相应更新,就可以通过TextWatcher接收到通知。除此之外,TextWatcher不应该做过多超出自己本职的工作。那么,这部分工作由谁来完成呢??

完善

答案是InputFilter。从名字上就可以看出这是一个过滤器,负责过滤掉所有不合要求的操作。那么如何使用呢?首先看看这个类本身的结构。1

2

3

4

5public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend);

public static class AllCaps implements InputFilter{}

public static class LengthFilter implements InputFilter{}

有一个待实现的filter方法,以及两个实现了filter方法的内部类。

AllCaps

设置了AllCaps过滤器的EditText,会自动将用户输入的小写字母转换成大写字母,效果上与设置android:textAllCaps="true"相同。使用InputFilter时需调用EditText的setFilters(InputFilter[] filters)方法。一个EditText可以设置多个过滤器,因此传入的值为数组。使用AllCaps的代码示例,1EditText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});

LengthFilter

添加该过滤器,效果上与android:maxLength=""相同。使用如下,1

2EditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});

filter方法我们最后再来解析,接下来我们先了解一下InputFilter的子类。

DigitsKeyListener

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值