今天碰到一个需求, 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值判断是否为“”的操作,而这个操作可以有很多方式,比如,软键盘弹出时监听,焦点是否消失监听,调用网络请求接口发出请求前,等等。所以这个就看个人喜好了。

更多相关文章

  1. 第17天android:《android从零开始》视频(1-5)
  2. Android(安卓)EditView
  3. Android下模拟按键输入
  4. [RK3399][Android7.1] 调试笔记 --- 设置搜狗为开机默认输入法
  5. Android(安卓)EditText不弹出软键盘
  6. Android保存32位BMP格式图片
  7. 怎么去掉联系人、通话记录、拨号列表界面中的电话号码中间的空格
  8. Android入门学习笔记之人机用户界面
  9. Android(安卓)系统广播Action一览验证

随机推荐

  1. Android简明开发教程六:用户界面设计
  2. android Studio 码云新建项目
  3. 安卓开发环境的搭建(Eclipse+ADT+SDK+JDK
  4. Android 模拟器安装apk文件
  5. 达牛:android的基础学习—如何做好环境搭
  6. Android应用安全风险与防范
  7. Android(安卓)消息分发使用EventBus的实
  8. android GrantPermissionsActivity 详解
  9. 自定义控件
  10. Android Studio XML布局基础