EditText输入限制:整数,小数,最大值,最大字符长度,手机号

EditText是最常用的控件。很多情况下都要求只能输入特定的字符。比如只能输入整数,只能输入两位小数等。

为了满足EditText输入限制,大体上有两种方法:
- 给EditText加TextWatcher,监听用户输入,如果输入不合法,作相应处理。
- 使用InputFilter。

两种方法都能实现,但感觉第一种方式不太好复用。考虑使用InputFilter的实现。

InputFilters can be attached to Editables to constrain the changes that can be made to them.
(InputFilters可以限制可输入控件的输入)

EditText继承TextView,TextView中有个setFilters方法,这个方法就是设置InputFilters的。需要注意的是,这个方法最好只调用一次,多次调用,只有最后一次才会生效(即会覆盖之前的操作)。

在实际使用中,只要实现InputFilter类,满足各种各样的输入限制就行了。InputFilter只有一个filter方法要实现。该方法有五个参数:
- CharSequence source:刚输入的还没显示出来的字符
- int start与int end:应该是输入字符的位置,输入一个字符时分别是0和1,删除时都是0.
- Spanned dest:已经在EditText中显示出来的字符。
- int dstart, int dend:输入字符要插入和删除的位置。

实现了一个XEditText类,该类继承自AppCompatEditText,实现了多个InputFilter满足输入限制的功能。


import android.content.Context;
import android.support.v7.widget.AppCompatEditText;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextUtils;
import android.util.AttributeSet;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

/**
 * Created by 林下de夕阳 on 2017/4/28.
 * 具有输入限制的EditText
 */

public class XEditText extends AppCompatEditText {
   
   

    // 保存设置的所有输入限制
    private List<InputFilter> inputFilters;

    public XEditText(Context context) {
        super(context);
        init();
    }

    public XEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public XEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        inputFilters = new ArrayList<>();
    }

    /**
     * 设置允许输入的最大字符数
     */
    public void setMaxLengthFilter(int maxLength) {
        inputFilters.add(new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值