EditText中输入信息的限制的方法

应用场景

在Android应用中有时需要EditText中只允许输入约定的一些字符,禁止输入其他字符。这里列举了一些可能的应用场景。 
1. 场景一 
在通讯录保存好友信息界面中填写好友的电话号码时,应当只能输入数字,禁止输入其他字符。 
2. 场景二 
在登录界面中输入用户名和密码时,由于很多账号系统都不支持中文的用户名和密码,只允许使用英文字母和数字。如果可以禁止在输入框中输入中文可以减少不必要的登录验证过程,也方便了用户操作。 
3. 场景三 
在邮箱地址的输入框中,应当只允许输入英文字母,数字和@.两个符号。

android:digits属性

EditText提供了一个android:digits配置,它表示EditText能够接受的字符集合。通过配置此属性,就可以实现只允许输入指定的字符。这里列举上述三种场景下的android:digits配置。 
1. 场景一:只允许输入数字 
android:digits="0123456789" 
2. 场景二:只允许输入数字和英文字母 
android:digits="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 
3. 场景三:只允许输入数字,英文字母和@.两个符号 
android:digits="[email protected]"

使用android:digits属性有几个需要注意的地方。 
1. android:digits属性是隐藏的,无法直接在EditText的可视化属性列表中找到。只能直接在XML中配置。当在XML中增加了这项配置后,才可以在EditText的可视化属性列表中找到。 
2. android:digits属性中的字符顺序没有影响,例如只允许输入数字时,可以用android:digits="0123456789",也可以用android:digits="9876543210"。 
3. android:digits属性中允许有重复字符,有重复字符在使用效果上没有影响。例如android:digits="aaaAAA"和android:digits="aA"效果是一样的。 
4. android:digits属性只能设置允许输入哪些字符,不能设置禁止输入哪些字符,也就是说android:digits属性只能设置白名单,不能设置黑名单。

inputType属性

带有中文输入法的手机,通常输入法会有三种类型的软键盘:中文键盘,英文键盘和数字键盘,不同键盘类型之间可以切换。虽然android:digits属性可以让EditText中只允许输入指定类型的字符,但并不能控制软键盘弹出时的类型。例如在设置android:digits只允许输入数字时,可能弹出的软键盘是英文键盘或中文键盘,需要用户点击切换到数字键盘后才可以输入;在设置android:digits只允许输入英文和数字时,可能弹出的软键盘是中文键盘,同样需要用户点击切换到英文键盘和数字键盘后才可以输入。如果能在软键盘显示时就直接跳到对应键盘类型,不需要用户切换就更好了。 
EditText提供了一个android:inputType属性来设置输入框的类型。android:inputType可以使用的选项非常多,这里只列出和软键盘显示相关的几个选项。

inputType属性值 含义
number 用来输入数字
textCapCharacters 输入的全部字母大写
textCapWords 输入的每个单词首字母大写
textCapSentences 输入的每个句子首字母大写
textPassword 用来输入密码,所有输入的字符都会变成星号*
textVisiblePassword 用来输入密码,输入的字符原样显示
textEmailAddress 用来输入Email地址

当设置android:inputType为number时,输入法开启时会自动切换到数字键盘。当设置为这里的其他几个选项时,输入法开启时会自动切换到英文字母键盘。这里列举上述三种场景下的android:inputType配置。  
1. 场景一:只允许输入数字  
android:inputType="number"。实际上,当inputType设置为number后,EditText中就只能输入数字了,那么android:digits="0123456789"也不用设置了。 
如果android:inputType="number"和android:digits同时设置,则实际可以输入的字符以android:digits配置为准。例如android:digits="01234567+-",则可以输入的字符为"01234567+-",这时如果同时设置了android:inputType="number",可以达到自动切换到数字键盘的目的。 
2. 场景二:只允许输入数字和英文字母  
android:inputType="textVisiblePassword"。其他几个选项似乎都不太合适,textCapxxx的会有大小写的约束,textPassword显然只能用在密码输入框中,如果不介意软键盘中多几个符号,textEmailAddress倒也可以用在这里。 
3. 场景三:只允许输入数字,英文字母和@.两个符号  
android:inputType="textEmailAddress"。 
最后再吐槽下android在android:inputType参数上的设计,android并没有将各个android:inputType参数对应的功能全部实现在android框架中,部分参数的功能完全交给输入法去实现,还有一部分参数的功能一半在android内部实现,一半交给输入法实现。由于android输入法的开放性,android本身对输入法开发商又没有任何约束,这导致了各个android:inputType参数在不同输入法上的表现千差万别。例如textCap…这几个参数,android原本希望用它来控制输入字母的大小写,但大多数输入法都没有完全实现这几个选项中对大小写的设定,有些只实现了textCapCharacters,有些只是将软键盘调整为英文键盘,有些则干脆什么也不做。textEmailAddress有些输入法会在软键盘上方额外增加几个邮箱中常用的符号,有些则只是显示英文键盘。

时间: 2024-10-11 20:43:15

EditText中输入信息的限制的方法的相关文章

如何获取一个AlertDialog中的EditText中输入的内容

怎么获取一个AlertDialog中的EditText中输入的内容? new AlertDialog.Builder(this)   .setTitle("请输入")   .setIcon(android.R.drawable.ic_dialog_info)   .setView(new EditText(this))   .setPositiveButton("确定", null)   .setNegativeButton("取消", null

Android EditText中输入价格判断

EditText 中输入价格判断 mText.addTextChangedListener(new SimpleEditWatcher() { @Override public void afterTextChanged(Editable s) { final String text = s == null ? "" : s.toString(); mClickButton = !TextUtils.isEmpty(text.trim()); int index = text.inde

存储linux RAID6中raid信息丢失数据恢复解决方法

数据恢复故障描述: 原存储为12块2T硬盘组成的Linux RAID6,文件系统均为EXT3,此存储上划有3个LUN,每个均为6TB大小,某天在RAID失效后,维护人员为了抢救数据,对此失效的存储重进行分配RAID,并进行了初始化.初始化进行很长时间后,维护人员察觉到情况有异,便强制停止初始化,但初始化已达到 50%以上.数据部分已被不可逆的破坏.数据恢复故障分析:故障的起因仅仅是RAID失效,维护人员随后的抢救数据过程中用11块硬盘进行重分配RAID5,并进行长时间的初始化,这对原始数据是不可

关于 ScrollView 中嵌套 EditText,输入多行会使整体滚动的问题

问题: ScrollView 中嵌套 EditText,在 EditText 中输入多行,会使 ScrollView 整体滚动.如果下方内容较长,会将 EditText 顶上去,体验不好. 解决: 监听键盘的弹出和收起,在弹出时,移除 EditText 下方的所有 View,使 ScrollView 没有滚动空间:在键盘收起时,将移除的 View 重新添加回来. 注意两个问题: 在 Activity 中,设置 this.getWindow().setSoftInputMode( WindowMa

在EditText中怎么去检查输入的字符串的长度?

听说用textwatch可以监听到edittext中输入的字符串的长度, 但是我不太会用希望高人指点一下    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                mtv =(TextView) findViewById(R.id.tv);        me

实现在矩形框中输入文字,可以显示剩余字数的功能

如下图: 要实现上面的功能,需要做到三点: 1.实现矩形框布局 思路就是矩形框作为整个布局的一个background,在drawable中创建一个shap.xml样式文件 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"     android:shape="r

EditText实现输入限制和校验

EditText实现输入限制和校验 一.方法 1)输入限制 1.通过android:digits限制只能输入小写abc android:digits="abc" 2.通过android:inputType限制只能输入数字 android:inputType="number" 在android:inputType中可以设置各种限制,比如邮箱地址等等 2)校验 直接通过代码实现 String s=et_verify_empty.getText().toString();

android 中如何限制 EditText 最大输入字符数

方法一: 在 xml 文件中设置文本编辑框属性作字符数限制 如:android:maxLength="10" 即限制最大输入字符个数为10 方法二: 在代码中使用InputFilter 进行过滤 //editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)}); 即限定最大输入字符数为20 [java] view plaincopy public class TextEditActivity exten

editText中设置回车输入不换行

editText中设置回车输入不换行 这是源码 Mms 编辑界面所使用的一个效果,在信息正文的编辑框里输入回车是不会实现换行的,实现代码如下,也许有时候你也有这样的需求. [java] view plaincopy Activtyy 实现TextView.OnEditorActionListener这个接口 public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (event != null) {