EditText要求输入整数数字且要从1开始,不能输入0。

今天碰到一个需求, EditText要求输入整数数字且要从1开始,不能输入0。 怎么搞? 1、先搞定只能输入整数数字

android:inputType="number"
复制代码

这个属性,就是整数数字格式

常用属性,如下:

//文本类型,多为大写、小写和数字符号。 
    android:inputType="none"//输入普通字符
    android:inputType="text"//输入普通字符
    android:inputType="textCapCharacters"//输入普通字符
    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="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"//时间键盘
复制代码

2、通过EditText的addTextChangedListener()方法,调用TextWatcher接口的三个方法中的after,来实现 EditText输入值从1开始,不能输入0。

  edittext.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                 if (s.toString().startsWith("0") || s.toString().equals("")) {
                    edittext.setText("1");
                    edittext.setSelection(1);
                }
            }
        });
复制代码

为什么我要放在after里呢。 before,on,after。 这三者。的关系是,我输入了文字,还未在edittext上显示;输入了文字,正在edittext上显示;和输入了文字,在edittext上显示出来了。这三个时刻,开始执行对应方法里的操作。 所以,如果我删除了后,我不操作了。那就是“”了。这个时候,我如果after里的代码是放在on里。那么,edittext将显示的是“”。这不符合我的要求。因此该放在after里。 3、为什么这么写after方法里的代码?

  if (s.toString().startsWith("0")) {
                    edittext.setText("1");
                    edittext.setSelection(1);
                }
复制代码

既然输入的数字是从1开始,那我们就直接用startsWith()来判断是否是0带头,是则该修改为1; 要考虑到一点,就是两位以上的数字肯定是要从>=1的数字带头的,而不是0。 一个思路点注意:setText()是会调用before,on,after三个方法的哦。所以,你在这三个方法里写的内容不能变成死循环啦。 另一个思路点注意:光标,在我edittext.setText("1");后,我的光标是在设置的“1”之前的,所以,我们该怎么办。现有的方式是设置光标。即 edittext.setSelection(1)。设置光标在哪一个下标下,当然是在1啦。对不?在输入的首位数字的后面嘛。 分析一下需求如下: edittext,默认为1。我可以删除1,键盘加个2,edittext变成2。 edittext,默认为1。我删除1,键盘加个0,edittext变成1。 edittext,默认为1。我删除1,键盘不加了,关闭键盘,edittext会变成1。 所以要满足这个靠那addTextChangedListener三个接口是不够的,所以还需要有个对Edittext值判断是否为“”的操作,而这个操作可以有很多方式,比如,软键盘弹出时监听,焦点是否消失监听,调用网络请求接口发出请求前,等等。所以这个就看个人喜好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值